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请求中的各项参数。在这些参数中,最常用的就是获取访问请求参数。当通过超链接的形式发送请求时,就可以为该请求传递参数,这可以通过在超链接的后面加上"?"来实现。

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

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

在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的更多相关文章

  1. IT兄弟连 JavaWeb教程 JSP内置对象经典面试题

    1.请说明cookie.request.session.application的作用域和声明周期? 并说明它们适用与什么场景? request的生命周期是一次请求.可以用于JSP表单提交数据. ses ...

  2. IT兄弟连 JavaWeb教程 JSP内置对象3

    读取web.xml配置信息的config对象 config对象主要用于取得服务器的配置信息.通过pageContxt对象的getServletConfig()方法获取一个config对象.当一个Ser ...

  3. IT兄弟连 JavaWeb教程 JSP内置对象2

    application对象 application对象用于保存所有应用程序中的公有数据.它在服务器启动时自动创建,在服务器关闭时销毁,当application对象没有被销毁时,所有用户都可以共享app ...

  4. IT兄弟连 JavaWeb教程 JSP内置对象经典案例

    案例需求:使用MVC模式编写一个程序当发起一个deptList.do请求时在servlet中准备一个部门列表对象,把这个列表对象放入request作用域中,然后转发到deptlist.jsp,使用js ...

  5. JavaWeb学习----JSP内置对象详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

    JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...

  7. JavaWeb基础-Jsp内置对象

    request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应,它是HttpServlteRequest类的实例.Request对象具有请求域,即完成客户端 ...

  8. JavaWeb——JSP内置对象application,JSP属性范围

    application application语法 application对象 JSP属性范围 范围的分类 page request session application pagecontext延伸 ...

  9. JavaWeb——JSP内置对象request,response,重定向与转发 学习总结

    什么是JSP内置对象 九大内置对象 requestJSP内置对象 request对象常用方法 request练习 responseJSP内置对象 response练习 response与request ...

随机推荐

  1. 用css3技术给网站加分

    自己写了几个小DEMO,请打开http://codepen.io/shenggen/

  2. PO 审批及生成xml文件

    *********************************************************************** * Report : YTST_RAINY_MM2 * ...

  3. java web service

    1.编写服务代码 服务代码提供了两个函数,分别为sayHello和sayHelloToPerson,源代码如下: /* * File name: HelloService.java * * Versi ...

  4. 【智能无线小车系列九】在树莓派上使用USB摄像头

    材料准备: 1.树莓派 2.AS 4WD小车 3.WebCam 4.小米移动电源 5.TP—LINK 高增益150MUSB无线网卡 操作流程: 1.将WebCam插上树莓派后,首先要确认树莓派是否支持 ...

  5. 对于atomic nonatomic assign retain copy strong weak的简单理解

    atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作 1)atomic 设置成员变量的@property属性时,atomic是默认值,提供多线程安全 在多线程环 ...

  6. [NOIP2011提高组day2]-2-聪明的质监员

    2.聪明的质监员(qc.cpp/c/pas) [问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到 n 逐一编号,每个矿石都有自己的重量 wi 以及价 ...

  7. [usaco2008feb_gold]路面修整

      FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了N段,N个整数A_1 ...

  8. Ubuntu 14.04 下 android studio 安装 和 配置【转】

    本文转载自:http://blog.csdn.net/xueshanfeihu0/article/details/52979717 Ubuntu 14.04 下 android studio 安装 和 ...

  9. UESTC - 900 方老师炸弹 —— 割点

    题目链接:https://vjudge.net/problem/UESTC-900   方老师炸弹 Time Limit: 4000/2000MS (Java/Others)     Memory L ...

  10. java random配置修改

    不知道 报啥错的时候 ,改这个 vim /usr/java/latest/jre/lib/security/java.security 原值: securerandom.source=file:/de ...