[Java][web]利用Spring随时随地获得Request和Session
利用Spring随时随地获得Request和Session
一、准备工作:
在web.xml中加入
<listener> <listener-class> org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
二、用法:
1、方法一:通过代码实现
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
2、方法二:通过注解实现:
@Autowired
private HttpServletRequest request;
Request作用域
<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>
针对每次HTTP请求。Spring容器会依据loginAction bean定义创建一个全新的LoginAction bean实例,且该loginAction bean实例仅在当前HTTP request内有效,因此能够依据须要放心的更改所建实例的内部状态。而其它请求中依据loginAction bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。
当处理请求结束,request作用域的bean实例将被销毁。
Session作用域
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
针对某个HTTP Session。Spring容器会依据userPreferences bean定义创建一个全新的userPreferences bean实例,且该userPreferences bean仅在当前HTTP Session内有效。与request作用域一样,你能够依据须要放心的更改所创建实例的内部状态,而别的HTTP Session中依据userPreferences创建的实例,将不会看到这些特定于某个HTTP Session的状态变化。当HTTP Session终于被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。
global session作用域
<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>
global session作用域类似于标准的HTTP Session作用域,只是它只在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念。它被全部构成某个portlet web应用的各种不同的portlet所共享。
在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。
请注意,假如你在编写一个标准的基于Servlet的web应用,而且定义了一个或多个具有global session作用域的bean,系统会使用标准的HTTP Session作用域,而且不会引起不论什么错误
二、为什么须要额外的配置RequestContextFilter
或许会有一个疑问,已经通过ContextLoaderListener(或ContextLoaderServlet)将Web容器与Spring容器整合。为什么这里还要用额外的RequestContextListener以支持Bean的另外3个作用域,原因是ContextLoaderListener实现ServletContextListener监听器接口,而ServletContextListener仅仅负责监听Web容器的启动和关闭的事件。
RequestContextFilter实现ServletRequestListener监听器接口,该监听器监听HTTP请求事件,Webserver接收的每次请求都会通知该监听器。通过配置RequestContextFilter,Spring容器与Web容器结合的更加密切。
三、作用域依赖问题
假设将Web相关作用域的Bean注入到singleton或prototype的Bean中,这样的情况下。须要Spring AOP
<bean name="car" class="com.demo.Car" scope="request">
<aop:scoped-proxy/>
</bean>
<bean id="boss" class="com.demo.Boss" >
<properrty name="car" ref="car" />
</bean>
转载于:https://www.cnblogs.com/llguanli/p/7372894.html
[Java][web]利用Spring随时随地获得Request和Session相关推荐
- spring boot java app_利用spring boot创建java app
利用spring boot创建java app 背景 在使用spring框架开发的过程中,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置和复杂的bean依赖关系,特别是在使用mvc的时候各 ...
- Java Web 七 会话技术 八 Cookie 九 Session
七 会话技术 打开浏览器,访问服务器中资源,关闭浏览器:这个过程就是会话 分类 * Cookie会话技术:浏览器会话技术* Session会话技术:服务器会话技术 作用 解决ServletContex ...
- java web利用mvc结构实现简单聊天室功能
简单聊天室采用各种内部对象不适用数据库实现. 一个聊天室要实现的基本功能是: 1.用户登录进入聊天室, 2.用户发言 3.用户可以看见别人发言 刚才算是简单的需求分析了,现在就应该是进 ...
- Java Web(11) Spring MVC 返回Json
2019独角兽企业重金招聘Python工程师标准>>> 1. 首先是对Spring mvc 进行xml配置 <?xml version="1.0" enco ...
- java web视频学习-ServletContext和Request和Response
文章目录 ServletContext 如何得到ServletContext对象 有什么作用 1.可以获取全局配置参数 2.可以获取Web应用中的资源 3.可以存取数据:准备工作 ServletCon ...
- Java web学习——Spring MVC项目实例,三层架构通过JDBC链接SQLServer2012
Spring MVC架构原理?原理篇 1.新建项目 File-New-Other,选择Dynamic web project 项目建好后的目录结构如下: 2.导入jar包 导入spring mvc框架 ...
- java web 利用ajax 异步向后台提交数据
前台界面的js代码实现; <script>$(function(){$("#username").focus(function(){$("error" ...
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- Java Web学习总结(12)——使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
最新文章
- Open3d学习计划—高级篇 2(彩色点云配准)
- 2021算法竞赛入门班第十节课【字符串】练习题
- 不要随随便便听别人安利买基金。。。
- shell开启飞行模式_今天才知道,原来手机的飞行模式用处那么多,看完涨知识了...
- 线性判别结合源码分析LDA原理
- python线程池模块第三方包_python线程池(threadpool)模块使用笔记详解
- java基础----多态性
- 标量、向量、矩阵、张量
- 换了马甲也能认出“你” | 有了这个数据集,AI有望揪出变种勒索软件
- 个人电脑防止被入侵的设置方法。
- wxwindows编译
- ROS系统中启用摄像头模块
- 图像坐标系与世界坐标系的变
- 网络诊断 网络连接配置
- 百宝云常用运算符教程
- 计算机网络——网络层:控制层面
- 计算机内存容量影响游戏的吗,内存容量对整机游戏性能影响有多大?
- 你办培训机构还不知道教育培训管理系统?
- 国外著名大学(计算机,通信及电子方面学院)
- Cocos技术派 | TS版属性面板定义高级用法
热门文章
- JVM——CPU缓存架构与Java 内存模型
- oracle状态blocked,oracle 监听状态为BLOCKED
- 王者荣耀4月14日服务器维护,王者荣耀体验服4月14日停机更新 鲁班七号加强!...
- bootstraptable 列隐藏_bootstrap中table如何隐藏列?
- css3 z-index,z-index的工作原理
- 正在从“vetur”获取代码操作_长时间运行 io.Reader 和 io.Writer 操作测算进度和估算剩余时间...
- php生成pdf中文断码_Rmarkdown导出中文PDF解决方案
- python的三个特性_Python3.9的7个特性
- 澄海哪里学机器人编程_少年学机器人编程
- python 化学模块_Python chemif包_程序模块 - PyPI - Python中文网