在这篇博文中,我们将讨论和学习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对象是生成的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对象是一个包含上一页抛出的异常的包装器。它通常用于生成对错误条件的适当响应。

二、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中的九大隐式对象及四个作用域的更多相关文章

  1. jsp学习--JSP运行原理,九大隐式对象和JSP常用标签

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  2. JSP 9大隐式对象和四个作用域的范围

    Java中 九大隐式对象说明 输入/输出对象:  request   response   out 作用域通信对象: session  application  pageContext Servlet ...

  3. 20160331javaweb之JSP include 指令&&九大隐式对象

    3.零散知识 (1)jsp映射 <servlet> <servlet-name>index</servlet-name> <jsp-file>/inde ...

  4. JSP的学习(6)——九大隐式对象及其out对象

    本篇将介绍JSP中的九大隐式对象,并重点介绍其中的out对象. 我们在之前的博客<JSP的学习(1)——基础知识与底层原理>一文中已经知道,JSP最终要被翻译和转换成Servlet,在转换 ...

  5. JSP页面以及JSP九大隐式对象

    €JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. €JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比 ...

  6. JSP九大隐式对象

    JSP九大隐式对象 request HttpServletRequest response HttpServletResponse session HttpSession application Se ...

  7. JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构

    一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...

  8. JSP--JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构

    一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1.    JSP模板元素:JSP中HT ...

  9. JSP九大隐式对象和四大域对象-----面试

    因为jsp实质是一个Servlet对象:jsp在第一次访问时会被Web容器翻译成Servlet,在执行过程:第一次访问---->inex.jsp---->index_jsp.java--- ...

随机推荐

  1. 201521123067 《Java程序设计》第3周学习总结

    201521123067 <Java程序设计>第3周学习总结 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用 ...

  2. 201521123098 《Java程序设计》第2周学习总结

    1. 本周学习总结 1. 熟悉了一些码云中储存eclipse中代码的操作,利于随时储存代码,避免U盘丢失导致代码丢失的问题: 2. 了解了如何从码云中提取已储存的代码: 3. 学会了如何创建动态数组, ...

  3. [转载] sublime text 2 调试python时结果空白

    之前用的时候都一切正常,今天突然就出现了这个问题.按ctrl+b执行的时候结果只有空白,查了很多文章都只提到了中文路径.系统路径等等,没有解决问题,直到看到了这篇文章:http://384444165 ...

  4. JAVA课设--五子棋--团队博客

    1 团队名称.团队成员介绍 徐璐琳 网络1511班 201521123010 祁泽文 网络1511班 201521123011 张晨晨 网络1511班 201521123009 2 项目git地址 团 ...

  5. Hyperledger Fabric 1.0 从零开始(六)——创建Fabric多节点集群

    4:创建Fabric多节点集群 4.1.配置说明 首先可以根据官方Fabric自带的e2e_cli列子中的集群方案来生成我们自己的集群,与案例不同的是我们需要把容器都分配到不同的服务器上,彼此之间通过 ...

  6. JVM(三)内存回收(一)

    最近花了相当长一段时间在看Hotspot JVM的GC和内存分配,本节先总结和回顾一下内存回收的相关知识点,内存的分配放到下节再讨论. 一.什么是JVM的GC GC即Garbage Collectio ...

  7. Mybatis第一篇【介绍、快速入门、工作流程】

    什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  8. temp--达州银行

    达州银行现场 服务器IP地址 192.168.1.234 ilink / ilink 自己电脑需要设置为固定IP 192.168.1.XXX 子网掩码 255.255.255.0 192.168.1. ...

  9. Markdown使用简单示例

    标题示例: 标题一 #标题一 标题二 #标题二 标题三 ###标题三 标题四 ####标题四 标题五 #####标题五 标题六 ######标题六 连接示例 [![License](图片地址)](跳转 ...

  10. StringBuffer和String的相互转换

    1:用法: * A:String -- >StringBuffer * a:通过构造方法 * b:通过append()方法 * B:StringBuffer --> String * a: ...