对request,session,application作用域形象理解

RequestSessionApplication作用域详解 在Java Web开发中,requestsessionapplication是三个关键的作用域,用于存储和访问数据。request作用域仅在当前请求中有效,session作用域与用户会话相关,可在多个请求间共享数据,而application作用域则在整个Web应用程序中有效。这些作用域servlet的doGet或doPost方法中通过相应的对象(如HttpServletRequest、HttpSessionServletContext)进行数据的存储和获取。合理使用这些作用域可以提高Web应用程序的 阅读详情
几乎所有的Web开发语言都支持Session功能,Servlet也不例外。 Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的。  

作用域分为四种,分别为:  

page 在当前页面有效(仅用于JSP中)  
request 在当前请求中有效  
session 在当前会话中有效  
application 在所有应用程序中有效  

是不是看不太明白?page因为仅用于JSP中,这里只讲述其他三种作用域。 首先要声明的一点,所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。  

话说武松一日来到景阳岗,见一旗帜迎风飘扬,旗子上书五个大字“三碗不过岗”。 武松叫道:“店家,拿三碗酒来,再切两斤熟牛肉!”店小二应声道:“三碗好酒,二斤熟牛肉啰~~”里面厨师赶忙当当当当切好牛肉,店小二倒上三碗酒,店小二端上前来。  

武松咕咚咕咚连干三碗,叫一声“好酒!店家,再来三碗!”小二忙又倒上三碗好酒, 武松一饮而尽。就这样前前后后武松一共喝了十八大腕。付了帐刚要走,店小二道: “客官,这前面山上有大虫,客官刚刚喝完十八碗酒恐怕过不得岗,不如在小店暂住一夜, 待明天和猎户一同过岗岂不是好?”  

之后武松说什么就留待各位看官自己去回忆啦。在这段武松打虎中, 大家有没有看到些熟悉的东西?  

武松: 浏览器。  
酒馆: 服务器。  
店小二、厨师: Servlet或者JSP。  
来三碗好酒!: 浏览器向服务器发出HTTP请求。  
店小二上酒: 服务器的响应。  
武松从进店到离开: 一个HTTP对话。  
我们可以看到,Web交互的最基本单位为HTTP请求(武松点菜)。 每个用户从进入网站到离开网站这段过程称为一个HTTP会话 (武松进店到出店),一个服务器的运行过程中会有多个用户访问, 就是多个HTTP会话(酒馆当然不可能只接待武松一个客人)。那么作用域就可以理解为:  

request HTTP请求开始到结束这段时间  
session HTTP会话开始到结束这段时间  
application 服务器启动到停止这段时间  

request  

一个HTTP请求的处理可能需要多个Servlet合作(武松点菜时店小二就要吩咐厨房做菜), 几个Servlet之间可以通过某种方式传递信息(店小二就用吆喝的方式通知厨房),但这个信息在请求结束后就无效了(厨房在做完菜之后就不用再管这道菜的事儿了)。  

Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的:  

void setAttribute(String name, Object value) 将对象 value 以 name 为名称保存到request作用域中。  
Object getAttribute(String name) 从request作用域中取得指定名字的信息。  
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,最后在forward到的Servlet中 getAttribute即可实现信息传递。  

PHP的程序员可能不太好理解这一段,因为PHP中没有转发的概念, 一个请求只能由一个PHP文件来处理,所以PHP中根本没有request作用域的概念。而Servlet则不同,请求可以在应用程序中任意转发,所以用request作用域在不同Servlet之间传递信息。 需要注意两点:  

转发不是重定向,转发是在Web应用内部进行的。PHP支持重定向但没有转发。  
转发对浏览器是透明的,也就是说,无论在服务器上如何转发,浏览器地址栏中显示的仍然是最初那个Servlet的地址。  
session  

session作用域比较容易理解,同一浏览器访问多次,在这多次访问之间传递信息,就是session作用域。 ('''武松每次点菜帐房先生都要记一笔账,等武松走之前结帐用。这笔帐在武松吃饭过程中始终有效,即位于session作用域中''')  

session是通过HttpSession接口实现的。  

Object HttpSession.getAttribute(String name) 从session中获取信息  
void HttpSession.setAttribute(String name, Object value) 向session中保存信息  
而通过HttpServletRequest.getSession()方法可以获得HttpSession对象。  

HttpSession HttpServletRequest.getSessio() 获取当前请求所在的session的对象。  
session的开始容易判断(浏览器发出第一个HTTP请求即可认为会话开始), 但结束就不好判断了(因为浏览器关闭时不会通知服务器“我关了,会话可以结束了”),所以只能通过这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。 Tomcat的默认值为120分钟,但这个值也可以通过 HttpSession 的 setMaxInactiveInterval 方法来设置。  

void setMaxInactiveInterval(int interval) 设置绘画的超时值。  
如果想主动让会话结束,如用户单击“注销”的时候,可以使用 HttpSession 的 invalidate 方法:  

vooid invalidate() 强制结束当前session。  
application  

application作用域就是服务器启动到关闭的整段时间, 在这个作用域内设置的信息可以被所有应用程序使用。 (餐馆打烊后结帐,用到的即是开张到打烊之间的所有信息。)  

还记得上一节提到的ServetContext吗? application作用域上的信息传递就是通过ServetContext实现的。  

Object getAttribute(String name) 从application中获取信息。  
void setAttribute(String name, Object value) 向application作用域中设置信息。  
总结  

可以看到,每个作用域除了实现接口不同、意义不同之外,它们的使用方法和作用都是相同的, 都是通过 getAttribute 和 setAttribute 方法进行信息传递。  

作用域 意义 实现接口  
request HTTP请求内 HttpServletRequest  
session HTTP会话内 HttpSession  
application 服务器生命周期内 ServletContext  
从零构建企业级多智能体系统:LangGraph 全流程实战 + 部署指南(含代码与架构图) > 在大模型应用爆发的今天,如何构建一个可协作、可调试、可部署的多智能体系统?LangGraph 正在成为工程师的新宠。本文从原理剖析、流程建模、代码实战到前后端部署,手把手带你用 LangGraph 构建一个企业级 AI 助理系统,整合财务分析、法务审阅、报告生成与图表可视化等 Agent 模块,全面打通从用户输入到报告输出的全链路闭环。适合有工程思维的 AI 架构师、Agent 研发人员、以及大模型项目实践者。 阅读详情

相关推荐

YOLO26涨点改进 |TGRS 2026 | 全网独家改进、特征融合创新篇 | 引入CMIFE跨模态交互特征提取模块,充分挖掘互补信息,适合多模态图像融合,目标检测,实例分割,遥感图像分类高效涨点

本文提出CMIFE模块用于改进YOLO26网络模型,通过跨模态交互特征提取实现多尺度特征的精细化融合。该模块采用双注意力机制(自注意力强化模态内一致性,交叉注意力实现跨模态互补信息筛选),有效解决了传统YOLO融合中的信息冗余和负迁移问题。实验表明,CMIFE模块在保持模型实时性的同时,显著提升了小目标检测、遮挡场景等复杂环境下的检测精度。文章详细介绍了模块原理、网络结构、核心代码实现方法,并提供了三种改进版YOLO26的配置文件方案(yolo26_CMIFE-1/2/3.yaml)。

Ai缝合怪、助力小伙伴高效发论文 118

Web的三大作用域详解

Web作用域的介绍详解,作用域的作用与选择使用介绍

记录分享编程与冲浪知识 1467

WinFormWebView2-自用-个性化浏览器-桌面程序开发-程序源码

这是集成了WebView2的内核浏览器桌面程序,类似Edge,Chrome浏览器,使用VisualStudio2019开发工具编写来的,项目正常编译可套,请放心下载。可以看配套的指导文章:https://blog.csdn.net/zs1028/article/details/132298695

分享 对request,session,application作用域形象理解

requestsessionapplication学习08-11-16 23:03 发表于:《生活点滴》 分类:未分类 好像最近发现自己挺多最基本的知识都没有掌握牢固,哎。。。。 几乎所有的Web开发语言都支持Session功能,Servlet也不例外。 Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的。 作用域分为四种,分别为: p...

jjruan的专栏 1195

web四大作用域

web开发中四个域对象 1.page域指pageContent(jsp有效) 2.request域指HttpServletRequest(一次请求) 3.session域指HTTPSession(一次会话) 4.application域指ServletContext(当前web应用) 他们之所以是域对象,原因是他们都内置了map集合,都有setAttribute和getAttribute方法。而且...

zhang__rong的博客 5347

java application作用域_servlet三大作用域requestsessionapplication

javaweb开发中Servlet三大域对象的应用(requestsessionapplication(ServletContext))。1. requestrequest是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。方法: request.setAttribute()...

weixin_30514003的博客 632

request,session,application作用域形象理解(转)

几乎所有的Web开发语言都支持Session功能,Servlet也不例外。 Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的。 作用域分为四种,分别为: page 在当前页面有效(仅用于JSP中) request 在当前请求中有效 session 在当前会话中有效 application 在所有应用程序中有效 是...

杨村 136

request,response,session,application四者之间的作用域联系以及各自的运行机制

request服务器获取用户请求; response:服务器答复用户请求的资源; session:用户使用服务器开始到结束的过程; application:网站服务器启动到停止的过程; 在asp中,作用域可分为四种:   ①仅仅用于JSP中的page其作用域为在当前页面有效  (这里了解就好) ②request作用域为在当前http请求中有效  ③session作用域为在当前会

CjfBlog的博客 1万+

Requestsessionapplication的区别

1. request( 请求作用域 )对象内数据存活范围是当客户端向服务器发送一个请求,服务器向客户端返回一个响应之后,该请求对象就被销毁了。之后再次发送的请求也无法获取之前request对象存放的任何数据。 request的setAttribute和getAttribute方法一般成对出现。都是在服务器端内部执行的,客户端不知道服务器端是否执行过。 request的getParameter()方法的作用是获取到客户端。通过表单或url请求参数发送的参数值...

m0_54241271的博客 6415

Requestsessionapplication作用域范围

https://www.cnblogs.com/zhoudi/p/5995783.html request对象 request对象内数据的存活范围就是在request对象的存活范围内 当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了; 之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得在之前的request对象中所存放的任何数据。 session对象 session对象内数据的存活范

yygr的博客 2216

关于request,session,application作用域理解

几乎所有的Web开发语言都支持Session功能,Servlet也不例外。 Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的。   作用域分为四种,分别为:   page 在当前页面有效(仅用于JSP中)   request 在当前请求中有效   session 在当前会话中有效   application 在所有应用程序中有效   是

qq_36800150的博客 1117

web作用域

今天翻起之前的一本JSP+servlet的教科书,想起之前去年老师叫我起来回答web作用域的时候我那令人发笑的回答: “web作用域有五个:page,requestsession,pageContext,application。” 好吧,第一句话就错了,没错,web的作用域只有4个,分别是page,requestsessionapplication。 而所谓的pageContext是J

u010603019的博客 786

jsp 的四个作用域 :page、requestsessionapplication的区别 .

1、区别: 1.page指当前页面有效。在一个jsp页面里有效 2.request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward方式跳转多个jsp。在这些页面里你都...

chimu9074的博客 1233

requestsession 的区别联系

文章目录一、request二、session三、比较四、常见使用 一、request request范围较小一些,只是一个请求。 request对象的生命周期是针对一个客户端(说确切点就是一个浏览器应用程序)的一次请求,当请求完毕之后,request里边的内容也将被释放点 简单说就是你在页面上的一个操作,request.getParameter() 就是从上一个页面中的url、form中获取参数。...

南淮北安的博客 1万+
上一篇: EJB错误解决
下一篇: EJB3.0-JPA实体的注解规范以及Hibernate特有的扩展
Zebulon
博客等级 码龄16年 153粉丝 35原创
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值