IT兄弟连 JavaWeb教程 JSP内置对象1

JSP内置对象定义

JSP提供了由容器实现和管理的内置对象,也可以称之为隐含对象,这些内置对象不需要通过JSP页面编写来实例化,在所有的JSP页面中都可以直接使用,它们起到了简化页面的作用,JSP的内置对象广泛应用于JSP的各种操作中。

JSP九大内置对象

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

在JSP中一共预先定义了9个这样的对象,分别为request、response、session、application、pageContext、config、page和exception。

request对象

request对象封装了由客户端生成的HTTP请求的所有细节,主要包括HTTP头信息、系统信息、请求方式和请求参数等。通过request对象提供的响应方法可以处理客户端浏览器提交的HTTP请求中的各项参数。

1.访问请求参数

我们知道request对象用于处理HTTP请求中的各项参数。在这些参数中,最常用的就是获取访问请求参数。当通过超链接的形式发送请求时,就可以为该请求传递参数,这可以通过在超链接的后面加上"?"来实现。

在页面中定义超链接,代码如下:

删除

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

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

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

2.在作用域中管理属性

在进行请求转发时,需要把一些数据传递到转发后的页面进行处理。这时,就需要使用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范围内有效。

3.获取cookie

cookie的中文意思是"小甜饼",然而在互联网中的意思与这就完全不同了,它和食品完全没有关系。在互联网中,cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器。通过使用cookie可以表示用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某个指定目录中。

通过request的getCookies()方法即可获得所有cookie对象的集合。

4.解决中文乱码

因为request请求都是ISO-8859-1编码的,而在页面中采用的是UTF-8编码方式,所以在使用中文参数时会出现乱码的问题,要解决此问题,只要将获取到的数据通过String的构造方法使用指定的编码类型重新构造一个String对象,即可正确地显示中文信息。

5.获取客户端信息

通过request对象可以获取客户端的相关信息,如HTTP报头信息,客户信息提交方式。客户端主机IP地址、端口号等。在客户端获取用户请求相关的request对象的方法如下所示:

(1)getHeader(String name):获取HTTP协议定义的文件头信息

(2)getHeaders(String name):返回指定名字的request Header的所有值,其结果是一个枚举型的实例

(3)getHeadersNames():返回所有request Header的名字,其结果是一个枚举型的实例

(4)getMethod():返获得客户端向服务器端发送数据的方法,如get、post

(5)getProtocol():获得客户端向服务器发送数据所依据的协议名称

(6)getRequestURI():获取发出请求字符串的客户端地址,不包括请求参数

(7)getRequestURL():获取发出请求字符串的客户端地址

(8)getReadPath():返回当前请求文件的绝对地址

(9)getRemoteAddr():返回客户端的IP地址

(10)getRemoteHost():返回客户端的主机名

(11)getServerName():获取服务器的名字

(12)getServerPath():获取客户端所请求的脚本文件的文件路径

(13)getServerPort():获取服务器的端口号

6.显示国际化信息

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

response对象

response对象用于响应客户请求,向客户端输出信息,它封装了JSP产生的响应,并发送到客户端已响应客户端的请求,请求的数据可以是各种数据类型,甚至是文件。response对象在JSP页面内有效。

1.重定向网页

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

sendRedirect()方法的语法格式如下:

resposne.sendRedirect(String path);

参数说明:

path:用于指定目标路径,可以是相对路径,也可以是不同主机的其他URL地址。

2.处理HTTP头文件

通过response对象可以设置HTTP响应报头,其中,最常用的是禁用缓存、设置页面自动刷新和定时跳转网页。

(1)禁用缓存

在默认的情况下,浏览器将会对显示的网页内容进行缓存。这样,当用户再次访问相关网页时,浏览器会判断网页是否会有变化,如果没有变化则直接显示缓存中的内容,这样可以提高网页的显示速度,对于一些安全性较高的网站,通常需要禁用缓存。

通过设置HTTP头的方法实现禁用缓存,代码如下:

<% response.setHeader("Cache-Control","no-store");

    response.setDateHeader("Expires", 0); %>

(2)设置页面自动刷新

通过设置HTTP头还可以实现页面的自动刷新

使网页每隔10秒自动刷新一次,代码如下:

<% response.setHeader("refresh","10"); %>

(3)定时跳转网页

通过设置HTTP头还可以实现定时跳转网页的功能

使网页5秒钟后自动跳转到指定页面,代码如下:

<% response.setHeader(refresh","5;URL=itxdl.cn");

3.设置输出缓冲

通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区,在计算机术语中,缓冲区被定义为暂时防止输入或输出资料的内存。实际上,缓冲区也可以这样理解,在一个粮库中,由于装卸车队的速度要快于传送带的传送速度,为了不造成装卸车队的浪费,粮库设计了一个站台,装卸车队可以先将运送的粮食卸到这平台上,然后让传送机慢慢传送,粮库的这个站台就起到了缓冲的作用。当满足以下3种情况之一,就会把缓冲区的内容写到客户端。

(1)JSP页面的输出信息已经全部写入到了缓冲区。

(2)缓冲区已满

(3)在JSP页面中,调用了response对象的flushBuffer()方法或out对象的flush()方法。

response对象提供了如下所示的对缓冲区进行配置的方法。

(1)flushBuffer():强制将缓冲区的内容输出到客户端

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

(3)setBufferSize(int size):设置缓冲区的大小

(4)reset():清除缓冲区的内容,同时清除状态码和报头

(5)isCommitted():检测服务器端是否已经把数据写入到了客户端

session对象

session在网络中被称为会话。由于HTTP协议是一种无状态协议,也就是当一个客户端向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺点,HTTP协议提供了session,通过session可以在应用程序的Web页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。但是,如果在一个会话中,客户端长时间不向服务器发出请求,session对象就会自动消失。这个时间取决于服务器,例如,Tomcat服务器默认为30分钟。不过这个时间可以通过编写程序进行修改。

实际上,一次会话的过程也可以理解为一个打电话的过程。通话从拿起电话或手机拨号开始,直到挂断电话结束,在这个过程中,可以与对方聊很多话题,甚至重复的话题。一个会话也是这样,可以重复访问相同的Web页。

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

通过session对象可以存储或读取客户相关信息,如用户名或购物信息等,这可以通过session对象的setAttribute()方法和getAttribute()方法实现。

(1)setAttribute()方法

该方法用于将信息保存在session范围内,其语法格式如下:

session.setAttribute(String name,Object object)

参数说明:

name:用于指定作用于在session范围内的变量名。

object:保存在session范围内的对象。

(2)getAttribute()方法

该方法用于获取保存在session范围内的信息,其语法格式如下:

getAttribute(String name)

name:指定保存在session范围内的关键字。

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

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

removeAttribute(String name)

参数说明:

name:用于指定作用于在session范围内的变量名。一定要保证该变量在session范围内有效,否则将抛出异常。

3.销毁session

虽然当客户端长时间不向服务器发送请求后,session对象会自动消失,但对于某些实时统计在线人数的网站(例如聊天室),每次等session过期后,才能统计出准去的人数,这是远远不够的,所以还需要手动销毁session,通过session对象的invalidate()方法可以销毁session,其语法格式如下:

session.invalidate();

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

4.会话超时的管理

在应用session对象时也应该注意session的生命周期。一般来说,session的生命周期在20~30分钟之间。当用户首次访问时将产生一个新的会话,以后服务器就可以记住这个会话状态,当会话生命周期超时时,或者服务器端强制是会话失效时,这个session就不能使用了。在开发程序时应该考虑到用户访问网站时可能发生的各种情况,例如用户登录网站后在session的有效期外进行响应操作,用户会看到一张错误页面,这样的现象是不允许发生的。为了避免这种情况的发生,在开发系统时应该对session的有效性进行判断。

在session对象中提供了设置会话生命周期的方法,分别如下:

getLastAccessdTime():返回客户端最后一次与会话相关联的请求时间。

getMaxInactiveInterval():以秒为单位返回一个会话内两个请求最大时间间隔。

setMaxInactiveInterval():以秒为单位设置session的有效时间。

你可能感兴趣的:(IT兄弟连 JavaWeb教程 JSP内置对象1)