JSP内置对象

时间:2022-07-24
本文章向大家介绍JSP内置对象,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.内置对象概述

犹豫JSP使用Java作为脚本语言,所以JSP具有强大的对象处理能力,并且可以动态创建Web页面内容。但在使用一个对象前,Java语法需要先实例化这个对象,,这其实是一件比较麻烦的事情。为了简化开发,JSP提供了一些内置对象,用来实现JSP应用。在使用JSP内置对象时,不需要先定义这些对象,直接使用即可。

  • JSP的内置对象

内置对象名称

所属类型

有效范围

说明

application

javax.servlet.ServletContext

application

该对象代表应用程序上下文,它允许JSP页面与包括在同一应用程序中的任何Web组件共享信息

config

javax.servlet.ServletConfig

page

该对象允许将初始化数据传递给一个JSP页面

exception

java.lang.Throwable

page

该对象含有只能由指定的JSP“错误处理页面”访问的异常数据操作

out

javax.servlet.jsp.JspWriter

page

该对象提供对输出流的访问

page

javax.servlet.jsp.HttpJspPage

page

该对象代表JSP页面对应的Servlet类实例

pageContext

javax.servlet.jsp.PageContext

page

该对象是JSP页面中本身的上下文,他提供了唯一一组方法来管理具有不同作用域的属性,这些API在实现JSP自定义标签处理程序时非常有用

request

javax.servlet.http.HttpServletRequest

request

该对象提供对HTTP请求数据的访问,同时还提供用于加入特定数据数据的上下文

response

javax.servlet.http.HttpServletRespose

page

该对象允许直接访问HttpServletResponse对象,可用来向客户端输入数据

session

javax.servlet.http.HttpSession

session

该对象可以用来保存在服务器与一个客户端之间需要保存的数据,当客户端关闭网站的上所有网页时,session变量会自动消失

2.request请求对象

request对象封装了有客户端生成的HTTP请求的所有细节,主要包括HTTP头信息、系统信息、请求方法和请求参数等。

1.获取访问请求的参数

当我们通过超链接的形式发送请求时,可以为该请求传递参数,这可以在超链接的后边加上问号“?”来实现。 例:发送一个请求到delete.jsp页面,并传递一个名称为id的参数,可以通过下边代码实现:

<a href="delete.jsp?id=1">删除</a>

在delete.jsp页面中,可以通过request对象的getParamenter()方法获取传递的参数值,具体代码如下:

<%request.getParameter("id");%>

注意:在使用request的getParameter()方法获取传递的参数值时,如果指定的参数不存在,则返回null,如果制定了参数名,但未指定参数值,将返回空的字符串""。

2.获取表单提交的信息

在Web网络中,经常需要完成用户与网站的交互。例如,当用户填写表单后,需要把数据提交给服务器处理,这时服务器就需要获取这些信息。通过request对象的getParameter()方法,也可以通过获取用户提交的表单信息。例如,存在一个name属性为username的文本框,在表单提交后,要获取其value值,可以通过下面的代码实现:

String username=request.getParameter("username");

参数username与HTML表单的name属性对应,如果参数值不存在,则返回一个null值,该方法的返回值为String类型。

3.解决中文乱码

1.获取访问请求参数时乱码

原因:该请求参数采用的是ISO-8859-1编码,不支持中文。 解决方法:将获取到的数据通过String的构造方法使用UTF-8或GBK编码重新构造一个String对象。

例如:在获取包括中文信息的参数user时,可以使用下面代码:

String user=
new String(request.getParamenter("user").getBytes("ios-8859-1"),"utf-8");
2.获取表单提交的信息乱码

当获取表单提交到的信息时,通过request对象获取到的中文参数值为乱码,此时可以在page指令的下方加上调用request对象的setCharacterEncoding()方法,将编码设置为UTF-8或是GBK。 例如,在获取包括中文信息的用户名文本框(name属性为username)的值时,可以在获取全部表单信息前,加上下边的代码:

<% request.setCharacterEncoding("UTF-8");%>

这样在通过下边的代码获取表单的值时就不会产生中文乱码了。

String user=request.getParameter("username");

4.通过request对象进行数据传递

在进行请求转换时,需要把一些数据传递到转发后的页面进行处理,这时就需要使用request对象的setAttribute()方法将数据保存到request范围内的变量。 request对象的setAttribute()方法的语法格式如下:

request.setAttribute(String name, Object object);
  • name表示变量名,为String类型,在转发后的页面取数据时,就通过这个变量名来获取数据。
  • object:用于指定需要在request范围内传递的数据,为Object类型。

在将数据保存到request范围内的变量中后,可以通过request对象的getAttribute()方法获取该变量的值,具体的语法格式如下:

request.getAttribute(String name);
  • name:表示变量名,该变量名在request范围内有效。

5.获取客户端信息

通过request对象可以获取到客户端的相关信息。 在客户端获取用户请求相关信息的request对象的方法如下表所示

方法

说明

getHeader(String name)

获得HTTP定义的头部信息

getHeaders(String name)

返回指定名称的request Header的所有值,其结果是一个枚举类型的实例

getHeadersNames()

返回所有request Header的名称,其结果是一个枚举类型的实例

getMethon()

获得客户端向服务端传送数据的方法,如get、post、header、trace等。

getProtocol()

获得客户端向服务器端传送数据所依据的协议名称。

getRequestURI()

获得发出请求字符串的客户端地址,不包括请求的参数。

getRequestURL()

获得发送请求字符串的客户端地址。

getRealPath()

返回当前请求文件的绝对路径。

getRemoteAddr()

获取客户端的IP地址。

getRemoteHost()

获取客户端的主机名。

getServerName()

获取服务器的名字。

getServerPath()

获取客户端所请求的脚本文件的文件路径。

getServerPost()

获取服务端的端口号。

6.获取cookie

cookie是小段的文本信息,在网络服务器上生成,并发送给服务器。 通过使用cookie可以表示用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户端的某个指定目录中。 通过cookie的getCookies()方法可以获取到所有cookie对象的集合; 通过cookie对象的getName()方法可以获取到指定名称的cookie; 通过getValue()方法可以获取到cookie对象的值。 将一个cookie对象发送到客户端可以使用response对象的addCookie()方法。

7.显示国际化信息

浏览器可以通过accept-language的HTTP报头向Web服务器指向他所使用的本地语言。request对象中的getLocale()和getLocales()方法允许JSP开发人员获取这一信息,获取的信息属于java.util.Local类型。 java.util.Local类型的对象封装了一个国家和一种国家所使用的语言。 使用这个报头的代码如下:

<%java.util.Locale locale=request.getLocale();
String str="";
if(locale.equals(java.util.Locale.US)){
	str="Hello,welcome to access our company's web!";}
if(locale.equals(java.util.Locale.CHINA)){
str="您好,欢迎访问我们公司的网站!";
}%>
<%=str %>

3.respose响应对象

1.实现重定向页面

使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。重定向操作支持将地址重定向到不同的主机上,这一点与转发不同。 在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。用户可以从浏览器的地址栏中看到跳转后的地址。进行重定向操作后,request中的属性全部失效,并且开始一个新的request对象。 sendRedirect()方法的语法格式如下:

response.sendRedirect(String path);
  • path:用于指定目标路径,可以是相对路径,也可以是不同主机的URL地址。

2.处理HTTP文件头

1.设置响应的内容类型

通过response对象的setContentType()方法可以设置响应的内容类型,默认情况下采用的内容类型是text/html。通过指定响应的内容类型,可以让网页内容以不同的格式输出到浏览器中。 setContentType()方法的语法格式如下:

response.setContentType(String type);
  • type:用于指定响应的内容类型,可选值为text/html、text/plain、application/x_msexcel和application/msword等。
2.禁用缓存

在默认情况下,浏览器会对显示的网页内容进行缓存,这样,当用户再次访问相同的网页时,浏览器会判断网页是否有变化,如果没有变化,则直接显示缓存的内容,这样可以提高网页的显示速度。对于一些安全性要求比较高的网站,通常需要禁用缓存。通过设置HTTP头的方法实现禁用缓存,可以通过下面代码实现:

<%
response.setHeader("Cache-Control","no-store");
response.setDateHeader("Expires",0);
%>
3.设置页面自动刷新

通过设置HTTP头还可以实现页面的自动刷新。 例如,让网页每隔10秒自动刷新一次,可以使用下面代码:

<%response.setHeader("refresh","10");%>
4.定时跳转网页

通过设置HTTP头还可以实现定时跳转网页的功能。 例如:让网页5秒后跳转到指定的页面,可以用下面的代码;

<%response.setHeader("refresh","5;URL=login.jsp");%>

设置输出缓冲

通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区,当满足以下3种情况之一时,才会把缓冲区的内容写到客户端。

  • 页面的输出已经全部写入到缓冲区。
  • 缓冲区已满
  • 在JSP页面中调用了response对象的flushbuffer()方法或out对象的flush()方法。

对缓冲区进行配置的方法如下表所示:

方法

说明

flushbuffer()

强制将缓冲区的内容输出到客户端

getBufferSize()

获取响应所使用的缓冲区的实际大小,如果没有使用缓冲区,则返回0

setBufferSize(int size)

设置缓冲区的大小,如果将缓冲器的大小设置为0KB,则表示不缓冲

reset()

清除缓冲区的内容,同时清除状态吗和报头

isCommitted()

检测服务器端是否已经把数据写入到了客户端

例:设置缓冲区的大小为32KB,可以使用以下代码:

response.setBufferSize(32);

4.out输出对象

通过out对象可以向客户端浏览器输出信息,并且管理应用服务器上的输出缓冲区。在使用out对象输出数据时,可以对数据缓冲区进行操作,及时对缓冲区进行操作,及时清除缓冲区的残余数据,为其他的输出让出缓冲区间。待数据输出完毕后,要及时关闭输出流。

1.向客户端输出数据

out对象是一个最基本的应用,就是向客户端浏览器输出信息。out的对象可以输出各种数据类型的数据,在输出非字符串信息时,会自动转换为字符串进行输出。 out对象提供了print()和println()两种向页面输出信息的方法,下面分别进行介绍:

  • print()方法 print()方法用于向客户端浏览器输出信息。通过该方法向客户端浏览器输出信息与使用JSP表达式输出信息相同。
  • println()方法 println()方法也用于向客户端浏览器输出信息。与print()方法不同的是,该方法在输出内容后,还会输出一个换行符。

2.管理相应的缓冲区

管理缓冲区的方法

方法

说明

clear()

清除缓冲区的内容

clearBuffer()

清除当前缓冲区的内容

flush()

刷新流

isAutoFlush()

检测当前缓冲区已满时是自动清空还是抛出异常

getBufferSize()

获取缓冲区的大小

5.session会话对象

用户可以通过session在应用程序的Web页面进行跳转时保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。但是如果在一个会话中,客户端长时间不向服务器发出请求,session对象就会自动消失。这个时间取决于服务器,例如Tomcat服务器默认为30分钟。这个时间可以通过编写程序进行修改。

1.创建及获取客户的对话

session对象可以存储或读取客户相关的信息。他通过session的对象的setAttribute()方法和getAttribute()方法实现。

  • setAttribute()方法
  • 该方法用于将信息保存在session范围内,其语法格式如下:
session.setAttribute(String name,Object obj)
  • name:用于指定作用域在session范围内的变量名。
  • obj:保存在session范围内的对象。
  • getAttribute()方法 该方法用于保存在session范围内的信息,其语法格式如下:
session.getAttribute(String name);
  • name:指定保存在session范围内的关键字。
  • getAttribute()方法的返回值是Object类型,如果需要将获取到的信息赋给String类型的变量,需要进行强制类型转换或是调用其toString()方法。例:
String user=(String)session.getAttribute("username");//强制类型转换
String user1=session.getAttribue("username").toString();//调用toString方法

2.从会话中移除指定的对象

对于存储在session会话中的对象,如果想将其从session会话中移除,可以使用session对象的removeAttribute()方法。其语法格式如下:

removeAttribute(String neme)

3.设置session的有效时间

session对象提供了一个设置session有效时间的方法,setMaxInactiveInterval(),通过这个方法可以设置session的有效期。setMaxInactiveInterval()方法的语法格式如下:

session.setMaxInactiveInterval(3600);
  • time:用于指定有效时间,单位为秒。

4.销毁session

通过session对象的invalidate()方法可以销毁session,其语法格式如下:

session.invalidate();

session对象销毁后,就不可以再使用session对象了。如果在session被销毁后再调用session对象的任何方法,都将报出"Session already invaidated"异常。

6.application应用对象

application对象用于保存所有应用程序中的公有数据。他在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁时,所有用户都可以共享application对象。与session对象相比,application对象的生命周期更长,类似于系统的“全局变量”。

1.访问应用程序初始化数据

application对象提供了对应用程序初始化参数进行访问的方法。应用程序初始化参数web.xml文件中进行设置。web.xml文件位于Web应用所在目录下的WEB-INF子目录中。在web.xml文件中,通过标记可以配置应用程序初始化参数。 例如:在web.xml文件中配置连接MySQL数据库所需要的url参数,可以使用下面的代码:

<context-param>
	<param-name>url</param-name>
	<param-value>jdbc:mysql://127.0.0.1:3306/db_database</param-value>
</context-param>
</web-app>

application对象提供了两种访问应用程序初始化参数的方法,下面分别进行介绍:

  • getInitParameter()方法 该方法用于返回一下已命名的参数值,其语法格式如下:
application.getInitParameter(String name);
  • name用于指定参数名。
  • getAttributeNames()方法 该方法用于返回所有已经定义的应用程序初始化参数的枚举、
application.getAttributeNames()

2.应用程序环境属性管理

通过application对象可以存储、读取或移除应用程序环境属性。

  • setAttribute()方法 setAttribute()方法用于保存应用程序环境属性,该属性在application范围内有效,其语法格式如下:
application.setAttribute(String name,Object obj);
  • name:用于指定应用程序环境属性的名称。
  • obj:用于指定属性值,其值可以是任何Java数据类型。
  • getAttributeNames()方法 用于获取所有application对象使用的属性名,其语法格式如下:
application.getAttributeNames();
  • getAttribute()方法 用于获取指定属性的属性值,其语法格式如下:
application.getAttribute(String name);
  • name:用于指定属性名,该属性在application范围内有效。
  • removeAttribute()方法 removeAttribute()方法用于从application对象中去掉指定名称的属性,其语法格式如下:
removeAttribute(String name);
  • name:用于指定属性名,该属性在application范围内有效,否则将抛出异常。

7.其他内置对象

1.应答与请求的page对象

page对象代表JSP本身,只在JSP页面才是合法的。page对象本质上是包含当前Servlet接口引用的变量,可以看作是this关键字的别名。

page对象的常用方法

方法

说明

getClass()

返回当前Object的类

hashCode()

返回该Object的哈希代码

toString()

把该Object类转换成字符串

equals(Object o)

比较该对象和指定的对象是否相等

2.获取页面上下文的pageContext对象

pageContext对象可以获取JSP页面的request、response、session、application、expection等对象。pageContext对象的创建和初始化都有容器来完成。JSP页面也可以直接使用pageContext对向。

pageContext对象的常用方法

方法

说明

forward(java.lang.String relativeUtlpath)

把页面转发到另一个页面

getAttribute(String name)

获取参数值

getAttributeNamesInScope(int scope)

获取某范围的参数名称的集合,返回值为java.util.Enumeration对象

getException()

返回expeption对象

getRequest()

返回request对象

getResponse()

返回response对象

getSession()

返回session对象

getOut()

返回out对象

getApplication()

返回application对象

getAttribut()

为指定范围内的属性设置属性值

removeAttribute()

删除指定范围内的指定属性

3.获取web.xml配置对象的config对象

config对象主要用于取得服务器的配置信息。

config对象的常用方法

方法

说明

getServletContext()

获取servlet上下文

getServletName()

获取Servlet服务器对象名

getInitParameter()

获取服务器所有初始参数名称,返回值为java.utin.Enumeration对象

getInitParameterNames()

获取服务器中name参数的初始值

4.获取异常信息的exception对象

exception对象用来处理JSP文件执行时发生的所有错误和异常,只有在page指令中设置isErrorPage属性值为true的页面中才可以被使用,在一般JSP页面中使用该对象将无法编译JSP文件。exception对象几乎定义了所有异常情况,在Java程序中,可以使用try…catch关键字来处理异常情况,如果在JSP页面中出现没有捕获到的异常,就会生成exception对象,并把exception对象传送到page指令中设定的错误页面。

exception对象的常用方法

方法

说明

getMessage()

返回exception对象的异常信息字符串

getLocalizedmessage()

返回本地化的异常错误

toString()

返回关于异常错误的简单信息描述

fillInStackTrace()

重写异常错误的栈的执行轨迹