在这篇博文中,我们将讨论和学习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. 201521123104《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. (1)继承时子类将获得父类的属性与方法,并具有自身特有的属性与方法. (2)使用super还 ...

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

    1. 本周学习总结 2. 书面作业 1.常用异常 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 原来编写代码经常会出现数组访问 ...

  3. 201521123087《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名)在自己建立的数据库上执行常见SQL语句(截图)-参考 ...

  4. 再起航,我的学习笔记之JavaScript设计模式22(访问者模式)

    访问者模式 概念介绍 访问者模式(Visitor): 针对于对象结构中的元素,定义在不改变该对象的前提下访问结构中元素的新方法 解决低版本IE兼容性 我们来看下面这段代码,这段代码,我们封装了一个绑定 ...

  5. Linux SSH下安装Java并设置环境

    我是用Xshell进行远程连接阿里云服务器的,所以jdk不好下载. 我使用的是Winscp远程软件,在window上下载了jdk然后再上传到Linux服务器上 下面是安装的步骤 1.下载jdk8 登录 ...

  6. linux 命令随笔 ls cd pwd mkdir rm mv cp cat nl

    Linux 命令练习 ls命令 ls就是list的简写,目的是打印当前目录下的清单 格式 ls[选项][目录名] 常用参数 -a –all 列出目录下的所有文件,包括以 . 开头的隐含文件 -l 除了 ...

  7. geotrellis使用(三十四)矢量瓦片技术研究——矢栅一体化

    前言 本文所涉及技术与Geotrellis并无太大关系,仅是矢量瓦片前端渲染和加载技术,但是其实我这是在为Geotrellis的矢量瓦片做铺垫.很多人可能会说,Geotrellis为什么要搞矢量瓦片, ...

  8. JavaScript中的ASCII碼轉換成字符的兩種方法

    方法一:轉義字符 \xxx:用十六進制的ASCII碼值轉換成字符. 方法二:String方法 String.fromCharCode(value): //用十進制的ASCII碼值轉換成字符. 舉例:結 ...

  9. Windows和Linux查看和更改mysql连接池

    Windows: 查看: 进入mysql 输入:show variables like '%max_connections%'; 更改: 进入MYSQL安装目录 打开MYSQL配置文件 my.ini ...

  10. margin:0px auto和text-align:center区别

    (1)margin:0px auto :作用于块级元素,对块级元素进行居中 (2)text-align:center:作用于内联元素,必须放在要居中的内联元素所在的块级元素. 例: (1) <d ...