JSP中的九大隐式对象及四个作用域
在这篇博文中,我们将讨论和学习JSP中的隐式对象及四个作用域。
一、九大隐式对象
这些对象是JSP容器为每个页面中的开发人员提供的Java对象,开发人员可以直接调用它们而不用显式地声明它们再调用。 JSP隐式对象也称为预定义变量。
下表列出了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状态代码等。
3. out对象
out隐式对象是javax.servlet.jsp.JspWriter对象的一个实例,用于在响应中发送内容。
初始化JspWriter对象根据页面是否缓存而不同地实例化。缓冲可以通过使用page指令的buffered ='false'属性来关闭。
JspWriter对象包含与java.io.PrintWriter类大部分相同的方法。但是,JspWriter还有一些额外的方法用来处理缓冲。与PrintWriter对象不同,JspWriter会抛出IOExceptions异常。
4. session对象
session对象是javax.servlet.http.HttpSession的一个实例,其行为与Java Servlet下的会话对象行为完全相同。session对象用于跟踪客户端请求之间的客户端会话。
5. application对象
application对象是生成的Servlet的ServletContext对象的直接包装,实际上是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对象是一个包含上一页抛出的异常的包装器。它通常用于生成对错误条件的适当响应。
二、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 | 在当前页面有效 |
作用域介绍
由上图可知,这九个内置对象都有相应的作用域,作用域在这里的作用就是限定对象的生命周期。如果跳出了当前对象的作用域,该对象的信息就不能再被访问。
让我们通过一个例子在理解上述过程
1、首先写一个index.jsp页面调用其中的request、session、application和pageContext这个四个内置对象,并分别给其设置num属性值为1。代码如下:
<body>
<%
pageContext.setAttribute("num", );
session.setAttribute("num", );
request.setAttribute("num", );
application.setAttribute("num", );
//response.sendRedirect("http://localhost:8088/demo1012/first.jsp");
%>
<table>
<tr>
<td>pageContext:</td>
<td><%=pageContext.getAttribute("num")%></td>
</tr>
<tr>
<td>session:</td>
<td><%=session.getAttribute("num")%></td>
</tr>
<tr>
<td>request:</td>
<td><%=request.getAttribute("num")%></td>
</tr>
<tr>
<td>application:</td>
<td><%=application.getAttribute("num")%></td>
</tr>
</table>
</body>
在浏览器请求index.jsp页面显示结果如下:

由结果可知,在index.jsp页面中我们可以访问四个对象的num属性值。
2、我们用<jsp:forward page="first.jsp"></jsp:forward>替换上面第7行代码,重新请求index.jsp页面。运行结果如下:

可以看到无法获得之前的那个pageContext对象的num属性值,这主要是因为转发请求到了first页面,跳出了之前的pageContext对象的作用域,现在调用的pageContext对象是first.jsp页面重建的一个。所以其num属性值为null。
3、我们取消上述代码中第7行的注释,其中first.jsp页面代码就是上述代码的table部分,我们再重新请求index.jsp页面。运行结果如下:

可以看到无法获得之前的那个pageContext和request的num属性的值了,pageContext的原因如上,而因为我们对页面重定向到了first.jsp,开始重浏览器到index.jsp的request连接结束了,所以现在获得的request是在index.jsp到first.jsp页面建立的新request请求域下生成的request对象,所以其num属性未初始化为null。
4、我们再重新使用其他浏览器访问first.jsp页面,显示的结果如下:

我们知道当前会话,是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。因为这次我们使用另外的浏览器对服务器发起请求,所以服务器为这次用户请求建立了新的会话,所以其num的属性值为null。另外因为只有index.jsp页面对四个内置对象的num属性进行了初始化,所以first.jsp页面只有application对象还在其application作用域内。其值为index.jsp页面设置的1,其他两个属性都为null.
5、最后对于application作用域中的对象application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。这里并不是说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。这在其他scope中都是不会发生的,page、 request和session都是完全隔离的,无论如何修改都不会影响其他人的数据。
总结
1、最后你一定就可以理解下面说法了

参考资料:
1、对于JSP九大内置对象和四个作用域的理解:http://www.blogjava.net/ourday/archive/2008/09/20/230107.html
2、JSP九大内置对象:http://www.yiibai.com/jsp/jsp_implicit_objects.html
JSP中的九大隐式对象及四个作用域的更多相关文章
- jsp学习--JSP运行原理,九大隐式对象和JSP常用标签
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- JSP 9大隐式对象和四个作用域的范围
Java中 九大隐式对象说明 输入/输出对象: request response out 作用域通信对象: session application pageContext Servlet ...
- 20160331javaweb之JSP include 指令&&九大隐式对象
3.零散知识 (1)jsp映射 <servlet> <servlet-name>index</servlet-name> <jsp-file>/inde ...
- JSP的学习(6)——九大隐式对象及其out对象
本篇将介绍JSP中的九大隐式对象,并重点介绍其中的out对象. 我们在之前的博客<JSP的学习(1)——基础知识与底层原理>一文中已经知道,JSP最终要被翻译和转换成Servlet,在转换 ...
- JSP页面以及JSP九大隐式对象
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比 ...
- JSP九大隐式对象
JSP九大隐式对象 request HttpServletRequest response HttpServletResponse session HttpSession application Se ...
- JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...
- JSP--JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HT ...
- JSP九大隐式对象和四大域对象-----面试
因为jsp实质是一个Servlet对象:jsp在第一次访问时会被Web容器翻译成Servlet,在执行过程:第一次访问---->inex.jsp---->index_jsp.java--- ...
随机推荐
- 201521123077 《Java程序设计》第1周学习总结
1. 本章学习总结 java语言的历史 dos下运行 java文件 Math ,String ,Scanner,Interger等常用类的使用 jdk,jre,jvm等概念的了解 classpath, ...
- 201521123065《java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 1.多线程的临界资源:启动多个线程同时运行时,需要同时访问共同的资源,导致结果的不正确性: 2.原子性操作:只进行 ...
- 201521123055 《Java程序设计》第9周学习总结
1. 本章学习总结 2. 书面作业 Q.1常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 1.3 什么样的 ...
- Java课程设计——象棋(201521123042 姚佳希)
1. 团队课程设计博客链接 Java课程设计(团队版) 2 个人负责模块或任务说明 ChessBoard类创建棋盘及界面. ChessPoint类创建棋盘格点及界面. ChessPiece类创建棋子及 ...
- CoordinatorLayout的使用
最近项目有一个需求,做出类似闲鱼鱼塘界面的效果.如下图: 所以想到用CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout去搭建此界面. Coor ...
- 启用Oracle中的scott用户
启用Oracle中的scott用户 在Linux系统上安装Oracle服务器,有的不含有scott用户,有的scott用户被锁.下面是添加scott用户或解锁scott. 一. 验证scott用户是否 ...
- 深入浅出数据结构C语言版(17)——希尔排序
在上一篇博文中我们提到:要令排序算法的时间复杂度低于O(n2),必须令算法执行"远距离的元素交换",使得平均每次交换减少不止1逆序数. 而希尔排序就是"简单地" ...
- python之socket编程------粘包
一.粘包 什么是粘包 只有TCP只有粘包现象,UDP永远不会粘包 所谓粘包问题主要还是因为接收方不知道之间的界限,不知道一次性提取多少字节的数据所造成的 两种情况发生粘包: 1.发送端需要等缓冲区满才 ...
- Spring02-AOP
1,动态代理,指的是通过一个代理对象创建需要的业务对象,然后在这个代理对象中统一进行各种操作. 步骤: 1)写一个类实现InvocationHandler接口: 2)创建要代理的对象 2,创建一个简单 ...
- TomCat系统架构
1.TomCat总体结构 TomCat有两大核心组件:Connector和Container.Connector组件是可以被替换的,一个Container可以对应多个Connector. 多个Conn ...