`

JSP 四个作用域

 
阅读更多

下图为JSP内置对象作用域表 

名称                   作用域 

application        在所有应用程序中有效 

session            在当前会话中有效 

request            在当前请求中有效 

page               在当前页面有效 

首先要声明一点,所谓"作用域"就是"信息共享的范围",也就是说一个信息能够在多大的范围内有效。 

Web交互的最基本单位为HTTP请求。每个用户从进入网站到离开网站这段过程称为一个HTTP会话,一个服务器的运行过程中会有多个用户访问,就是多个HTTP会话。作用域解释如下。 

application:服务器启动到停止这段时间。 

session:HTTP会话开始到结束这段时间。 

request:HTTP请求开始到结束这段时间。 

page:当前页面从打开到关闭这段时间。 

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之间传递信息。 

需要注意两点: 

转发不是重定向,转发是在Web应用内部进行的。PHP支持重定向但没有转发。 

转发对浏览器是透明的,也就是说,无论在服务器上如何转发,浏览器地址栏中显示的仍然是最初那个Servlet的地址。 

page作用域 

page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。对page对象的引用通常存储在pageContext对象中。 

以上介绍的作用范围越来越小,request和page的生命周期都是短暂的,它们之间的区别:一个request可以包含多个page页(include,forward及filter)。

分享到:
评论

相关推荐

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

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

    jsp的四个作用域

    jsp的四个作用域\

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

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

    JSP 中Spring Bean 的作用域详解

    JSP 中Spring Bean 的作用域详解 Bean元素有一个scope属性,用于定义Bean的作用域,该属性有如下五个值: 1>singleton: 单例模式,在整个spring IOC容器中,单例模式作用域的Bean都将只生成一个实例。一般Spring...

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

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

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

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

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

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

    JavaBean四个作用域范围的详解

    主要介绍了JavaBean四个作用域范围的详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

    JSP中 Session和作用域的使用

    Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的。 作用域分为四种,分别为: page 在当前页面有效(仅用于JSP中) request 在当前请求中有效 session 在当前会话中有效 application 在所有...

    网页教程《跟姐姐学JSP》

    4. 四个作用域 4.1. 何为作用域 4.2. 例子:在线列表 5. 结合javabean实现CRUD 5.1. 概念和命名方式 5.2. Read(读取) 5.3. Create(创建) 5.4. Update(更新) 5.5. Delete(删除) 5.6. 用jdbc操作数据库 6. ...

    JSP标准标签库(jstl)

    JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据...

    JSP 常用的标签以及用法举例

    JSP部署于网络服务器上,比如我们常用的Tomcat,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML...本文重点介绍了常见的JSP标签和它们的用法,以及JSP页面相关的四大作用域和范围,然后是一个使用案例。

    JSP实现简单人事管理系统

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

    struts2传值

    2.加#号的放置获取,放置在制定域中,需要理解 jsp 九大对象四个作用域 a.例如放置在session域或者request域中的数据,必须先指定作用域,然后再指定保存的对象. b.页面struts2标签保存的数据也需要使用#来获取

    JSP/Servlet Java面试逻辑题

    1、说一说Servlet的生命周期?★★★★★ 答: servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。...这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。

    jstl标签详解.doc

    JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据

    jstl相关的jar包和文档内容

    JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据...

    jakarta-taglibs-standard-current-src.zip

     JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理...

Global site tag (gtag.js) - Google Analytics