1、内置对象概述
JSP有九大内置对象(又称为隐含对象),这些对象在JSP对象在 _jspService() 方法中预先作了声明,不需要开发者实例化即可直接使用,这些内置对象起到了简化页面的作用,它们由 Servlet 容器实现和管理。
JSP九大内置对象分别是:
● 输出输入对象:request 对象、response 对象、out 对象;
● 作用域通信对象:pageContext 对象、session 对象、application 对象;
● Servlet 对象:page 对象、config 对象;
● 错误处理对象:exception 对象。
内置对象的特点:
● 由JSP规范提供,不用编写者实例化;
● 通过 Servlet 容器实现和管理;
● 所有JSP页面均可使用;
● 只有在脚本元素的表达式或代码段中才可使用,例如:<%= %> 或 <% %> ,注意:<!% %> 中是不可以的,因为这里面定义的不会出现在 _jspService() 方法中。
2、request 对象
request (请求对象)对象是 javax.servlet.httpServletRequest 类型的对象,该对象封装了客户端向服务器发出的的请求信息(包括请求首行、请求头、请求体),作为字符串通过HTTP协议传送到JSP/Servlet 容器,并被用于初始化 request 对象,request 对象的作用域仅为一次请求。
常用的方法有:getParameter、getParameterNames 和getParameterValues 通过调用这几个方法来获取请求对象中所包含的参数的值。
3、response 对象
Response (响应对象)对象是 Javax.servlet.ServletResponse 类型对象,与 request 正好相反,它封装的是对于 request 请求服务器对客户端做出的响应信息,主要作用是将JSP容器处理的结果传回客户端。response对象的作用域仅为一次响应。
4、out 对象
Out (输出对象)对象是 Javax.servlet.jsp.JspWriter 类型对象,用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。要注意的是,数据输出完毕后,要及时关闭输出流。
5、pageContext 对象
pageContext (页面上下文对象)对象是 Javax.servlet.jsp.PageContext 类型对象,封装了当前JSP页面运行环境的信息,能够取得JSP程序运行期间所有参数,通过它还可以获取 JSP 页面的其它八个对象,又称为一个顶九个。它的创建和初始化都是由 Servlet 容器来完成,另外,它还实现将控制权从当前页面传输至其他页面的方法,作用域为当前页面。
6、session 对象
HTTP是无状态协议,WebServer 对每一个客户端请求都没有历史记忆,这时候就用session 来保存客户端状态信息,由服务器写入,客户端保存,客户端每次访问服务器都会将上次的session 记录返回给服务器,服务器就靠读取客户端提交的session 对象内的信息来获取客户端状态。
Session(会话对象)对象是 javax.servlet.http.HttpSession 类型对象,对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie 的基础上,所以使用时应注意判断一下客户端是否打开了cookie。
session 对象是由服务器自动创建的与用户请求相关的对象,服务器为每个用户都生成一个session 对象,用于保存该用户信息并跟踪用户的操作状态。session 对象内部使用Map 类来保存数据,因此保存数据的格式为 键值对形式。
session 主要用于跟踪会话,作用域为会话期(同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session 作用域的体现了),如果不需要跟踪会话,可以再page指令中指定session = false。
7、application 对象
Application (应用程序对象)对象是 javax.servle.ServletContext 类型的,存储了运行JSP页面的servlet以及在同一应用程序中的任何Web组件的上下文信息。它存在于服务器的内存空间中,服务器一旦启动,就会自动产生一个application对象,除非服务器被关闭,否则这个application对象将一直保持下去。application对象要由服务器自动清除它,不能被用户创建,用户也不能清除 application 对象,我们只能创建这个 application 对象的同步副本。
需要注意的是这些副本是同步的,任何一个副本上发生的变化都会影响到其他的副本。在 application 对象的生命周期中,在当前服务器上运行的每一个JSP程序都可以任意存取和这个 application 对象绑定的参数(或者Java对象)的值。application 对象的这些特性为我们在多个JSP程序中、多个用户共享某些全局信息(如当前的在线人数等)提供了方便。由此我们可以不借助数据库就实现聊天室的功能。
application作用域就是服务器启动到关闭的整段时间,在这个作用域内设置的信息可以被所有应用程序使用。与session 对象相比,application 对象生命周期更长,类似于系统的“全局变量”。
8、page 对象
page (页面对象)的类型是 java.lang.Object 类型对象,page 对象代表JSP本身,更准确地说它代表JSP被转译后的 Servlet 类对象,它可以调用 Servlet 类所定义的方法;可以使用Object类的方法,例如,hashCode()、toString()等。page 对象在JSP程序中的应用不是很广,但是java.lang.Object类还是十分重要的,因为JSP内置对象的很多方法的返回类型是Object。page 对象是为了执行应答请求和设置的Servlet类的实体,即显示JSP页面自身,作用域为当前page页面。
page 对象代表JSP本身,本质上包含当前 Servlet 接口引用的变量,类似于Java编程中的 this 指针。对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。对page对象的引用通常存储在 pageContext 对象中。
9、config 对象
config (配置对象)对象是 javax.servlet.ServletConfig的 类型对象,封装了 servlet 程序初始化时所需要的参数及服务器的有关信息。config 对象的主要作用是取得服务器的配置信息。通过 pageConext 对象的 getServletConfig() 方法可以获取 config 对象。开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
10、exception 对象
Exception (异常对象)是 Javax.lang.Throwable 类型对象, 只有在 page 指令中属性 isErrorPage=“true” 时才有效。如果某个JSP页面在执行的过程中出现了错误,那么JSP引擎会自动产生一个异常对象,如果这个JSP页面指定了另一个JSP页面为错误处理页面,那么JSP引擎会将这个异常对象放入到request对象中,传到错误处理页面进行处理。excepation 对象和Java 所有对象一样,具有系统提供的继承结构,几乎定义了所有异常情况。
11、session 对象和application 对象的比较
application 对象用于在多个程序之间保存信息,application 对象只有一个,它可以绑定若干个相当于全局变量的参数或者Java对象,每个JSP程序所访问的都是application对象的一个同步副本,而且application 对象的生命周期贯穿服务器的整个运行周期。
而服务器上的session 对象可以有多个,不同用户都有自己单独的 session 对象,用以记录该用户个人信息,一旦该用户关闭本次会话(例如关闭浏览器),该 session 对象将立即注销。 session 对象也可以绑定若干个参数或者Java对象,这些参数或者Java 对象就相当于局部变量,不同session对象间的同名变量是不会相互干扰的。应用session对象,可以很简单地实现购物车功能。
12、对于四个作用域的区别
● page:作用域为当前页面,有效时间最短;
● request:HTTP请求开始到结束;
● session:HTTP会话开始到结束;
● application:服务器启动到停止。
小结:一个复杂的 HTTP 请求需要多个 Servlet 协作处理,而这几个Servlet之间就是通过HttpServletRequest 接口的两个方法来实现的。 JSP的九个内置对象是为了方便开发而设置的,本文没有罗列出各个对象的常用方法,了解方法的请查阅API 文档。