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--- ...
随机推荐
- 201521123018 《Java程序设计》第3周学习总结
1. 本章学习总结 1. 学习了类的创建: 2. 学会利用快捷方式完成变量的getter和setter的设定: 3. 学会了静态变量和非静态变量的区别和定义: 4. 学习了构造函数的基本编写方法. 2 ...
- Java课程设计—学生成绩管理系统(201521123002 林楚虹)
1. 团队课程设计博客链接 团队博客链接 2.个人责模块或任务说明 根据学生学号查找学生成绩 根据学生姓名(支持模糊匹配)查找学生成绩 用POI技术导出Excel文件 3.自己的代码提交记录截图 4. ...
- 在dropwizard中使用feign,使用hystrix
前言 用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味.为了增强对外访问API的能力,需要引入open feign.这里简单在dropwizard中使用fe ...
- Lucene 搜索的初步探究
搜索应用程序和 Lucene 之间的关系 一般的搜索引擎都会采用这样的 Lucene 采用的是一种称为反向索引(inverted index)的机制.反向索引就是说我们维护了一个词 / 短语表,对于这 ...
- 你的专属定制——JQuery自定义插件
前 言 絮叨絮叨 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗 ...
- java编程基础复习-------第二章
一.标识符 java中标识符的命名规则: 以数字.字母.下划线和$符号组成:不能用数字开头:不能是java的关键字. 注意:不要用$命名标识符.习惯上,$只用在机器自动产生的源代码中. 二.关键字 1 ...
- Redis学习——Redis持久化之AOF备份方式保存数据
新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ...
- hdu4027 开方,记录
A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use ...
- ArcGIS RunTime SDK for Android之Features and graphics
今天是我开通博客园的第一天,希望以后可以多在博客园上分享自己的学习心得,记录自己的学习历程.最近在学习ArcGIS RunTime SDK for Android,所以第一篇随笔就从这里来吧.官网的教 ...
- Apache shiro的简单介绍与使用(与spring整合使用)
apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...