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的参数,可以通过下边代码实现:
代码语言:javascript复制<a href="delete.jsp?id=1">删除</a>
在delete.jsp页面中,可以通过request对象的getParamenter()
方法获取传递的参数值,具体代码如下:
<%request.getParameter("id");%>
注意:在使用request的getParameter()方法获取传递的参数值时,如果指定的参数不存在,则返回null,如果制定了参数名,但未指定参数值,将返回空的字符串""。
2.获取表单提交的信息
在Web网络中,经常需要完成用户与网站的交互。例如,当用户填写表单后,需要把数据提交给服务器处理,这时服务器就需要获取这些信息。通过request对象的getParameter()方法,也可以通过获取用户提交的表单信息。例如,存在一个name属性为username的文本框,在表单提交后,要获取其value值,可以通过下面的代码实现:
代码语言:javascript复制String username=request.getParameter("username");
参数username与HTML表单的name属性对应,如果参数值不存在,则返回一个null值,该方法的返回值为String类型。
3.解决中文乱码
1.获取访问请求参数时乱码
原因:该请求参数采用的是ISO-8859-1编码,不支持中文。 解决方法:将获取到的数据通过String的构造方法使用UTF-8或GBK编码重新构造一个String对象。
例如:在获取包括中文信息的参数user时,可以使用下面代码:
代码语言:javascript复制String user=
new String(request.getParamenter("user").getBytes("ios-8859-1"),"utf-8");
2.获取表单提交的信息乱码
当获取表单提交到的信息时,通过request对象获取到的中文参数值为乱码,此时可以在page指令的下方加上调用request对象的setCharacterEncoding()方法,将编码设置为UTF-8或是GBK。 例如,在获取包括中文信息的用户名文本框(name属性为username)的值时,可以在获取全部表单信息前,加上下边的代码:
代码语言:javascript复制<% request.setCharacterEncoding("UTF-8");%>
这样在通过下边的代码获取表单的值时就不会产生中文乱码了。
代码语言:javascript复制String user=request.getParameter("username");
4.通过request对象进行数据传递
在进行请求转换时,需要把一些数据传递到转发后的页面进行处理,这时就需要使用request对象的setAttribute()方法将数据保存到request范围内的变量。 request对象的setAttribute()方法的语法格式如下:
代码语言:javascript复制request.setAttribute(String name, Object object);
- name表示变量名,为String类型,在转发后的页面取数据时,就通过这个变量名来获取数据。
- object:用于指定需要在request范围内传递的数据,为Object类型。
在将数据保存到request范围内的变量中后,可以通过request对象的getAttribute()方法获取该变量的值,具体的语法格式如下:
代码语言:javascript复制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类型的对象封装了一个国家和一种国家所使用的语言。 使用这个报头的代码如下:
代码语言:javascript复制<%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()方法的语法格式如下:
代码语言:javascript复制response.sendRedirect(String path);
- path:用于指定目标路径,可以是相对路径,也可以是不同主机的URL地址。
2.处理HTTP文件头
1.设置响应的内容类型
通过response对象的setContentType()方法可以设置响应的内容类型,默认情况下采用的内容类型是text/html。通过指定响应的内容类型,可以让网页内容以不同的格式输出到浏览器中。 setContentType()方法的语法格式如下:
代码语言:javascript复制response.setContentType(String type);
- type:用于指定响应的内容类型,可选值为text/html、text/plain、application/x_msexcel和application/msword等。
2.禁用缓存
在默认情况下,浏览器会对显示的网页内容进行缓存,这样,当用户再次访问相同的网页时,浏览器会判断网页是否有变化,如果没有变化,则直接显示缓存的内容,这样可以提高网页的显示速度。对于一些安全性要求比较高的网站,通常需要禁用缓存。通过设置HTTP头的方法实现禁用缓存,可以通过下面代码实现:
代码语言:javascript复制<%
response.setHeader("Cache-Control","no-store");
response.setDateHeader("Expires",0);
%>
3.设置页面自动刷新
通过设置HTTP头还可以实现页面的自动刷新。 例如,让网页每隔10秒自动刷新一次,可以使用下面代码:
代码语言:javascript复制<%response.setHeader("refresh","10");%>
4.定时跳转网页
通过设置HTTP头还可以实现定时跳转网页的功能。 例如:让网页5秒后跳转到指定的页面,可以用下面的代码;
代码语言:javascript复制<%response.setHeader("refresh","5;URL=login.jsp");%>
设置输出缓冲
通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区,当满足以下3种情况之一时,才会把缓冲区的内容写到客户端。
- 页面的输出已经全部写入到缓冲区。
- 缓冲区已满
- 在JSP页面中调用了response对象的flushbuffer()方法或out对象的flush()方法。
对缓冲区进行配置的方法如下表所示:
方法 | 说明 |
---|---|
flushbuffer() | 强制将缓冲区的内容输出到客户端 |
getBufferSize() | 获取响应所使用的缓冲区的实际大小,如果没有使用缓冲区,则返回0 |
setBufferSize(int size) | 设置缓冲区的大小,如果将缓冲器的大小设置为0KB,则表示不缓冲 |
reset() | 清除缓冲区的内容,同时清除状态吗和报头 |
isCommitted() | 检测服务器端是否已经把数据写入到了客户端 |
例:设置缓冲区的大小为32KB,可以使用以下代码:
代码语言:javascript复制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()方法。其语法格式如下:
代码语言:javascript复制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参数,可以使用下面的代码:
代码语言:javascript复制<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() | 重写异常错误的栈的执行轨迹 |