JSP中的九大隐式对象及四个做用域

在这篇博文中,咱们将讨论和学习JSP中的隐式对象及四个做用域。html

1、九大隐式对象

这些对象是JSP容器为每一个页面中的开发人员提供的Java对象,开发人员能够直接调用它们而不用显式地声明它们再调用。 JSP隐式对象也称为预约义变量。java

下表列出了JSP支持的九个隐式对象 -程序员

1. request对象

request对象是javax.servlet.http.HttpServletRequest对象的一个实例。每当客户端请求页面时,JSP引擎将建立一个新对象来表示该请求。浏览器

request对象提供了获取包括表单数据,Cookie,HTTP方法等HTTP头信息的方法。缓存

2. response对象

response对象是javax.servlet.http.HttpServletResponse对象的一个实例。就像服务器建立request对象同样,它还建立一个对象来表示对客户端的响应。服务器

response对象还定义了处理建立新HTTP头的接口。经过此对象,JSP程序员能够添加新的Cookie或日期戳,HTTP状态代码等。session

3. out对象

out隐式对象是javax.servlet.jsp.JspWriter对象的一个实例,用于在响应中发送内容。app

初始化JspWriter对象根据页面是否缓存而不一样地实例化。缓冲能够经过使用page指令的buffered ='false'属性来关闭。yii

JspWriter对象包含与java.io.PrintWriter类大部分相同的方法。可是,JspWriter还有一些额外的方法用来处理缓冲。与PrintWriter对象不一样,JspWriter会抛出IOExceptions异常。jsp

4. session对象

session对象是javax.servlet.http.HttpSession的一个实例,其行为与Java Servlet下的会话对象行为彻底相同。
session对象用于跟踪客户端请求之间的客户端会话。

5. application对象

application对象是生成的ServletServletContext对象的直接包装,其实是javax.servlet.ServletContext对象的一个实例。

application对象是JSP页面在其整个生命周期中的表示。 当JSP页面被初始化时,将建立此对象,而且在JSP页面被jspDestroy()方法删除时application对象也将被删除。

经过向application对象添加属性值,能够确保组成Web应用程序的全部JSP文件均可以访问它。

6. config对象

config对象是javax.servlet.ServletConfig的实例化,是生成的servlet的ServletConfig对象周围的直接包装。

7. pageContext对象

pageContext对象是javax.servlet.jsp.PageContext对象的一个实例。pageContext对象用于表示整个JSP页面。

8. page对象

page对象是对该页面实例的实际引用。能够认为它是表示整个JSP页面的对象。

page对象是this对象的直接同义词。

9. exception对象

exception对象是一个包含上一页抛出的异常的包装器。它一般用于生成对错误条件的适当响应。

 

2、JSP中四个做用域

所谓“做用域”就是“信息共享的范围”,也就是说一个信息可以在多大的范围内有效。JSP中九个内置对象及其相应所属做用域以下表:

编号 对象 所属做用域 做用域描述
1 request request 在当前请求中有效
2 response page 在当前页面有效
3 out page 在当前页面有效
4 session session 在当前会话中有效
5 application application 在全部应用程序中有效
6 config page 在当前页面有效
7 pageContext page 在当前页面有效
8 page page 在当前页面有效
9 Exception page 在当前页面有效

 

 

做用域介绍

由上图可知,这九个内置对象都有相应的做用域,做用域在这里的做用就是限定对象的生命周期。若是跳出了当前对象的做用域,该对象的信息就不能再被访问。

让咱们经过一个例子在理解上述过程

一、首先写一个index.jsp页面调用其中的request、session、application和pageContext这个四个内置对象,并分别给其设置num属性值为1。代码以下:

 1 <body>
 2     <%
 3         pageContext.setAttribute("num", 1);
 4         session.setAttribute("num", 1);
 5         request.setAttribute("num", 1);
 6         application.setAttribute("num", 1);
 7         //response.sendRedirect("http://localhost:8088/demo1012/first.jsp");
 8     %>
 9     <table>
10         <tr>
11             <td>pageContext:</td>
12             <td><%=pageContext.getAttribute("num")%></td>
13         </tr>
14         <tr>
15             <td>session:</td>
16             <td><%=session.getAttribute("num")%></td>
17         </tr>
18         <tr>
19             <td>request:</td>
20             <td><%=request.getAttribute("num")%></td>
21         </tr>
22         <tr>
23             <td>application:</td>
24             <td><%=application.getAttribute("num")%></td>
25         </tr>
26     </table>
27 </body>

 

在浏览器请求index.jsp页面显示结果以下:

由结果可知,在index.jsp页面中咱们能够访问四个对象的num属性值。

二、咱们用<jsp:forward page="first.jsp"></jsp:forward>替换上面第7行代码,从新请求index.jsp页面。运行结果以下:

能够看到没法得到以前的那个pageContext对象的num属性值,这主要是由于转发请求到了first页面,跳出了以前的pageContext对象的做用域,如今调用的pageContext对象是first.jsp页面重建的一个。因此其num属性值为null。

三、咱们取消上述代码中第7行的注释,其中first.jsp页面代码就是上述代码的table部分,咱们再从新请求index.jsp页面。运行结果以下:

能够看到没法得到以前的那个pageContext和request的num属性的值了,pageContext的缘由如上,而由于咱们对页面重定向到了first.jsp,开始重浏览器到index.jsp的request链接结束了,因此如今得到的request是在index.jsp到first.jsp页面创建的新request请求域下生成的request对象,因此其num属性未初始化为null。

四、咱们再从新使用其余浏览器访问first.jsp页面,显示的结果以下:

咱们知道当前会话,是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。由于此次咱们使用另外的浏览器对服务器发起请求,因此服务器为此次用户请求创建了新的会话,因此其num的属性值为null。另外由于只有index.jsp页面对四个内置对象的num属性进行了初始化,因此first.jsp页面只有application对象还在其application做用域内。其值为index.jsp页面设置的1,其余两个属性都为null.

五、最后对于application做用域中的对象application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。这里并非说“从服务器启动,到服务器关闭”,是由于一个服务器可能部署多个应用,固然你关闭了服务器,就会把上面全部的应用都关闭了。application做用域里的变量,它们的存活时间是最长的,若是不进行手工删除,它们就一直可使用。与上述三个不一样的是,application里的变量能够被全部用户共用。若是用户甲的操做修改了application中的变量,用户乙访问时获得的是修改后的值。这在其余scope中都是不会发生的,page、 request和session都是彻底隔离的,不管如何修改都不会影响其余人的数据。

 

总结

一、最后你必定就能够理解下面说法了

 

参考资料:

一、对于JSP九大内置对象和四个做用域的理解:http://www.blogjava.net/ourday/archive/2008/09/20/230107.html

二、JSP九大内置对象:http://www.yiibai.com/jsp/jsp_implicit_objects.html

相关文章
相关标签/搜索