`

JSP9大内置对象之四个作用域

 
阅读更多
一、JSP内置对象概述
定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量。在JSP技术内部,已经定义好了若干个JSP内部对象,应用这些内部对象,可以实现很多很重要的功能。
JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

内置对象 代表内容 范围
request 触发服务调用的请求 request
response 对请求的应答 page
session 为请求的客户创建的session对象 session
application 从 servlet 配置对象获得的 servlet 上下文(如在getServletConfig() ,getContext()的调用中) application
out 向输出流写入内容的对象 page
pageContext 本 JSP 的页面上下文 page
page 实现处理本页当前请求的类的实例 page
config 本 JSP 的 ServletConfig page
exception 表示JSP页面运行时产生的异常 Page
二、四个作用域
    从表格中的第三列都指明了每个对象的范围,即作用域。首先要声明一点,所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。4个JSP内置对象的作用域分别为:application、session、request、page 。JSP内置对象作用域表如下:
名称
作用域
application   在所有应用程序中有效
session      在当前会话中有效
request     在当前请求中有效
page      在当前页面有效
Web交互的最基本单位为HTTP请求。每个用户从进入网站到离开网站这段过程称为一个HTTP会话,一个服务器的运行过程中会有多个用户访问,就是多个HTTP会话。作用域解释如下。
application 作用域
     application作用域就是服务器启动到关闭的整段时间,在这个作用域内设置的信息可以被所有应用程序使用。application作用域上的信息传递是通过ServletContext实现的,它提供的主要方法如下所示:
Object getAttribute(String name)  //从application中获取信息;
void setAttribute(String name, Object value)  //向application作用域中设置信息。
session作用域
     session作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现。session是通过HttpSession接口实现的,它提供的主要方法如下所示。
Object HttpSession.getAttribute(String name) //从session中获取信息。
void HttpSession.setAttribute(String name, Object value) //向session中保存信息。
HttpSession HttpServletRequest.getSessio() //获取当前请求所在的session的对象。
     session的开始时刻比较容易判断,它从浏览器发出第一个HTTP请求即可认为会话开始。但结束时刻就不好判断了,因为浏览器关闭时并不会通知服务器,所以只能通过如下这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。Tomcat的默认值为120分钟,但这个值也可以通过HttpSession的setMaxInactiveInterval()方法来设置:
void setMaxInactiveInterval(int interval)
如果想主动让会话结束,例如用户单击“注销”按钮的时候,可以使用 HttpSession 的 invalidate()方法,用于强制结束当前session:void invalidate()
request作用域
     一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的。
void setAttribute(String name, Object value) //将对象value以name为名称保存到request作用域中。
Object getAttribute(String name) //从request作用域中取得指定名字的信息。
     JSP中的doGet()、doPost()方法的第一个参数就是HttpServletRequest对象,使用这个对象的 setAttribute()方法即可传递信息。那么在设置好信息之后,要通过何种方式将信息传给其他的Servlet呢?这就要用到RequestDispatcher接口的forward()方法,通过它将请求转发给其他Servlet。
RequestDispatcher ServletContext.getRequestDispatcher(String path) //取得Dispatcher以便转发,path为转发的目的Servlet。
void RequestDispatcher.forward(ServletRequest request, ServletResponse response) //将request和response转发
     因此,只需要在当前Servlet中先通过setAttribute()方法设置相应的属性,然后使用forward()方法进行跳转,最后在跳转到的Servlet中通过使用getAttribute()方法即可实现信息传递。
     PHP的程序员可能不太好理解这一段,因为PHP中没有转发的概念,一个请求只能由一个PHP文件来处理,所以PHP中根本没有request作用域的概念。而Servlet则不同,请求可以在应用程序中任意转发,所以用request作用域在不同Servlet之间传递信息。
需要注意两点:
1、转发不是重定向,转发是在Web应用内部进行的。PHP支持重定向但没有转发。
2、转发对浏览器是透明的,也就是说,无论在服务器上如何转发,浏览器地址栏中显示的仍然是最初那个Servlet的地址。
page作用域
page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。对page对象的引用通常存储在pageContext对象中。
以上介绍的作用范围越来越小,request和page的生命周期都是短暂的,它们之间的区别:一个request可以包含多个page页(include,forward及filter)。
为了让大家更容易理解application、session、request、page 4个对象的作用范围,我们给出两个程序来进行详细说明。
【程序1】page01.jsp
[xhtml] view plaincopy
<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<jsp:useBean id="pagevar" scope="page" class="java.lang.StringBuffer"/> 
<jsp:useBean id="requestvar" scope="request" class="java.lang.StringBuffer"/> 
<jsp:useBean id="sessionvar" scope="session"  class="java.lang.StringBuffer"/> 
<jsp:useBean id="applicationvar" scope="application"  class="java.lang.StringBuffer"/> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>JSP内置对象作用域</title> 
</head> 
<body> 
<% 
    pagevar.append("page01"); 
    requestvar.append("page01"); 
    sessionvar.append("page01"); 
    applicationvar.append("page01"); 
%> 
<jsp:forward page="page02.jsp"/> 
</body> 
</html> 


【程序2】page02.jsp
[xhtml] view plaincopy
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<jsp:useBean id="pagevar" scope="page" class="java.lang.StringBuffer"/> 
<jsp:useBean id="requestvar" scope="request" class="java.lang.StringBuffer"/> 
<jsp:useBean id="sessionvar" scope="session" class="java.lang.StringBuffer"/> 
<jsp:useBean id="applicationvar" scope="application" class="java.lang.StringBuffer"/> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>JSP内置对象作用域</title> 
</head> 
<body> 
<% 
    pagevar.append("page02"); 
    requestvar.append("page02"); 
    sessionvar.append("page02"); 
    applicationvar.append("page02"); 
%> 
page = <%=pagevar.toString()%><br/> 
request = <%=requestvar.toString()%><br/> 
session = <%=sessionvar.toString()%><br/> 
application = <%=applicationvar.toString()%><br/> 
</body> 
</html> 


分享到:
评论

相关推荐

    JSP的九个内置对象及四个作用域

    JSP的九个内置对象及四个作用域

    jsp九大内置对象和四大作用域详解.docx

    jsp九大内置对象和四大作用域详解.docx

    jsp主要九大内置对象、四大web域、两种包含、两种注释、几个jsp标准动作

    NULL 博文链接:https://1601844782.iteye.com/blog/2274248

    jsp九大内置对象、四种作用域、跳转方式

    jsp有四种属性范围: page -&gt; 页面级别,显然只有在一个页面内可用。 request -&gt; 请求级别 服务器跳转,一次请求之后消失。 session -&gt; 会话级别 客户端跳转(服务器跳转),与浏览器有关,ie是在重新打开ie时才...

    浅谈jsp九大内置对象及四个作用域

    request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request ...pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page session 会话对象 类型 javax.serv

    JSP实现简单人事管理系统

    此系统使用jsp实现,其中包含了jsp九大内置对象和四大作用域的相关知识,采用map集合模拟数据库的方式,实现用户登录、员工信息展示、员工信息修改功能。 JSP的九大内置对象:Application,Config,Exception,Out,...

    吴天雄--JavaWeb完整笔记.doc

    模块二:使用eclipse和idea快速开发jsp(idea和tomcat的相关配置、eclipse创建web项目、jsp页面元素、jsp九大内置对象、四大作用域对象、解决get/post请求乱码问题、cookie和session详解、请求重定向);模块三:...

    18-el&jstl源代码.rar

    4.jsp内置/隐式对象(9个)----- 笔试 5.jsp标签(动作) 1.EL 表达式概述 2.EL从域中取出数据(EL最重要的作用) 3.EL的内置对象11个 4.EL执行表达式 1.JSTL概述 2.JSTL下载与导入 3.JSTL核心库的常用标签 1...

    JavaWeb重点叙述

    JavaWeb重点叙述里包括 jsp部分 servlet的生命周期 简述forward和redirect的区别 理解jsp的运行原理 jsp include指令和include动作的区别 创建servlet的步骤 了解Tomcat jsp的九个内置对象和四大作用域等

    超级有影响力霸气的Java面试题大全文档

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    java面试大全视频版

    Java面试题01.面试的整体流程 Java面试题02.java的垮平台原理 Java面试题03....内置对象和四大作用域和页面传值 Java面试题22.Session和Cookie的区别和使用场景 Java面试题23.mvc模式和mvc各部分的实现

    java面试宝典

    2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 5、语句float f=1.3;编译能否通过? 8 6、short s1 = 1; s1 = s1 + 1;有什么错? 8...

    千方百计笔试题大全

    2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 5、语句float f=1.3;编译能否通过? 8 6、short s1 = 1; s1 = s1 + 1;有什么错? 8...

    java 面试题 总结

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    java基础题 很全面

    1. 作用域public,protected,private,以及不写时的区别 23 2. BS与CS的联系与区别。 24 3. JDO是什么? 25 4. Cookies 25 5. Sessions 25 6. Cookies和Sessions的比较 26 7. 过滤器 26 8. 什么是事件监听器? 27 9. EJB...

    最新Java面试宝典pdf版

    17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可被override? 15 20、接口是否可继承...

    Java面试宝典2010版

    17、请说出作用域public,private,protected,以及不写时的区别 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 19、构造器Constructor是否可被override? 20、接口是否可继承接口? ...

    Java面试笔试资料大全

    17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可被override? 15 20、接口是否可继承...

Global site tag (gtag.js) - Google Analytics