在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
程序员在写代码的时候,难免会遇到作用域的问题,今天我们要谈的也是JSP的四大作用域。本文主要总结了JSP四大作用域page、request、session和application和它们的请求范围。

1、page
page直译就是页面的意思,所以page作用域就比较好理解了——page作用域表示只在当前页面有效,也就是用户请求的页面有效。当当前页面关闭或转到其他页面时,page对象将在响应回馈给客户端后释放。当程序运行跑出了当前的页面,你就无法在其它的页面访问当前页面设置的属性值。
我们都知道,JSP最终会被编译成Servlet文件。在Servlet容器中,每个Servlet都只存在一个实例。但是对于page作用域的属性来说,在当前页面设置的属性只在本次访问该页面有效,当你再次访问该页面时,又会重新初始化页面的属性。例如以下代码:
<%
out.print(pageContext.getAttribute("SiteName")); // 输出null
pageContext.setAttribute("SiteName", "果冻想-一个原创技术文章分享网站");
%>
当我在浏览器访问该页面时会输出null;当我再重新打开一个该页面时,还会输出null,并不会输出”果冻想-一个原创技术文章分享网站”。也就是说,page作用域范围的不会存在线程安全的问题,每一次访问同一个页面,设置的page作用域的属性都是不一样的。
2、request作用域
request表示一次客户端的请求,他在请求中有效。
request可以通过setAttribute()和getAttribute方法存取值实现页面中的信息传递,也可以通过forward()方法进行页面间的跳转(需要注意的是request是转发不是重定向,转发相对于浏览器来说是透明的,也就是无论页面如何跳转,地址栏上显示的依旧是最初的地址,浏览器感知不到),在这些转发页面中都可以使用request中存储的信息。
一次请求的生命周期从客户端发起到服务器接收并响应该请求,或者将该请求forward到另一个页面或者Servlet进行处理而结束。在此期间,本次请求的参数,属性都是有效的;一旦客户端刷新浏览器,重新发起请求,则之前的请求参数和属性都将失效。
特别需要注意的是,当我们使用<jsp:forward .../>动作将当前请求转向另一个页面或者Servlet的时候,该请求的参数和属性也一并转过去,并不会因为<jsp:forward .../>动作而丢失request的参数和属性。
3、session作用域
session作用域在当前回话中有效。当我们向服务器发送第一个请求开始,只要页面不关闭,或者会话未过期(默认30分钟),或者未调用HttpSession的invalidate()方法,接下来的操作都属于同一次会话的范畴。当一个台电脑上的同一浏览器对服务器进行多次访问时,在这多次访问之间传递的信息就是session作用域的范围。它从浏览器发出第一个HTTP请求即可认为会话开始,在浏览器关闭时结束会话,但是会话结束的时间是不确定的,因为在浏览器关闭时并不会通知服务器,一般Tomcat设置的默认时间为120分钟,也可以通过setMaxInactiveInterval(int)方法进行设置,或是通过invalidate()方法强制结束当前会话。session也可以通过setAttribute赋值和getAttribute取值。
在JSP中,每当向服务器发送一个请求,服务器响应这个请求的时候,会在客户端的Cookie中写一个session id值。每次发送请求的时候,会将该session id值一起发送到服务器端,服务器端根据该session id值来判断每次请求是否属于同一个session的范畴之内。
4、application作用域
application的作用域是最广的,它在所有的应用程序中都有效。它代表着整个Web应用的全局变量,对每一个页面,每一个Servlet都是有效的。当我们在application中设置属性时,这个属性在任意的一个页面都是可以访问的。
也就是当服务器开始到服务器结束这段时间,application作用域中存储的数据都是有效的,同样可以通过setAttribute赋值和getAttribute取值。要注意application里的变量可以被所有用户共用,当一个用户对application中的变量做了修改,其他用户再访问的是修改后的值。
在application作用域中设置的属性如果不手动调用removeAttribute函数进行删除的话,那么application中的属性将永远不会删除,如果Web容器发生重启,此时application范围内的所有属性都将丢失。
以上就是JSP四大作用域及请求范围的全部总结。相信无论是在实际应用中,还是在面试提问中,大家都会经常遇到这些知识点,因此大家一定要熟记以上的总结。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java基础语法之Switch语句讲解和练习
在Java中Switch语句是比较常用的语句,Switch语句一般用于一个表达式和多个值进行比较。因此,对于刚开始入门学习Java基础语法的朋友来讲,Switch语句是必须掌握的一个基础知识点。本文将讲解Switch语句的定义、格式和执行流程,为了进一步巩固大家对知识点的掌握,本文还为大家准备Switch语句的练习,下面一起来看看吧!
7382
2019-12-25 11:16:29
线程基础知识Java并发编程
线程基础知识Java并发编程,进程和线程是操作系统内两个很基的概念,进程是操作系统中进行保护和资源分配的基本单位,操作系统分配资源以进程为基本单位。而线程是进程的组成部分代表了一条顺序的执行流。
5506
2020-04-10 14:46:44
优化MySQL数据库的方法有哪些?
优化MySQL数据库是一个很大的目标,要完成这一目标,我们首先要在分析并找出问题的基础上,展开优化的具体思路。因此我们可以先分析影响数据库性能的因素,一般是因为SQL查询速度慢,大量并发占满数据库连接数,CPU时用率过高,服务器硬件损坏,再或者是IO的问题。总的来说,针对不同的问题有与之对应的优化方法。下面我们可以通过一个项目实战,来具体聊聊优化MySQL数据库的方法。
5280
2020-04-10 16:01:52
初级Java开发上班做什么?
作为Jjava开发除了写增删改查之外,还要学会运维、编程、打印机、NGINX,docker,熟悉项目数据库之类的部分,逻辑思维要强遇到问题不会的可以加一些交流群,平常要注意提高自己的看书籍和视频。
6333
2020-12-02 14:03:45
Java从零基础到入门需要从哪里开始学?
Java从零基础到入门需要从哪里开始学?Java是一门后端语言,即服务端,服务端代码一般运行在服务器上,通常运行Java程序的服务器都是Linux服务器。需要从Java 基础语法学起,如基本类型变量、for 循环、if else 等,还有Java 常用到的概念,比如面向对象的特性,其中有类、接口等。
4720
2022-03-17 10:39:58
