利用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;

三、关于RequestContextListener的背景知识:
基于LocalThread将HTTP request对象绑定到为该请求提供服务的线程上。这使得具有request和session作用域的bean可以在后面的调用链中被訪问到。

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相关推荐

  1. spring boot java app_利用spring boot创建java app

    利用spring boot创建java app 背景 在使用spring框架开发的过程中,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置和复杂的bean依赖关系,特别是在使用mvc的时候各 ...

  2. Java Web 七 会话技术 八 Cookie 九 Session

    七 会话技术 打开浏览器,访问服务器中资源,关闭浏览器:这个过程就是会话 分类 * Cookie会话技术:浏览器会话技术* Session会话技术:服务器会话技术 作用 解决ServletContex ...

  3. java web利用mvc结构实现简单聊天室功能

    简单聊天室采用各种内部对象不适用数据库实现. 一个聊天室要实现的基本功能是:         1.用户登录进入聊天室, 2.用户发言 3.用户可以看见别人发言 刚才算是简单的需求分析了,现在就应该是进 ...

  4. Java Web(11) Spring MVC 返回Json

    2019独角兽企业重金招聘Python工程师标准>>> 1. 首先是对Spring mvc 进行xml配置 <?xml version="1.0" enco ...

  5. java web视频学习-ServletContext和Request和Response

    文章目录 ServletContext 如何得到ServletContext对象 有什么作用 1.可以获取全局配置参数 2.可以获取Web应用中的资源 3.可以存取数据:准备工作 ServletCon ...

  6. Java web学习——Spring MVC项目实例,三层架构通过JDBC链接SQLServer2012

    Spring MVC架构原理?原理篇 1.新建项目 File-New-Other,选择Dynamic web project 项目建好后的目录结构如下: 2.导入jar包 导入spring mvc框架 ...

  7. java web 利用ajax 异步向后台提交数据

    前台界面的js代码实现; <script>$(function(){$("#username").focus(function(){$("error" ...

  8. Java Web(三) 会话机制,Cookie和Session详解

    很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...

  9. Java Web学习总结(12)——使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

最新文章

  1. Open3d学习计划—高级篇 2(彩色点云配准)
  2. 2021算法竞赛入门班第十节课【字符串】练习题
  3. 不要随随便便听别人安利买基金。。。
  4. shell开启飞行模式_今天才知道,原来手机的飞行模式用处那么多,看完涨知识了...
  5. 线性判别结合源码分析LDA原理
  6. python线程池模块第三方包_python线程池(threadpool)模块使用笔记详解
  7. java基础----多态性
  8. 标量、向量、矩阵、张量
  9. 换了马甲也能认出“你” | 有了这个数据集,AI有望揪出变种勒索软件
  10. 个人电脑防止被入侵的设置方法。
  11. wxwindows编译
  12. ROS系统中启用摄像头模块
  13. 图像坐标系与世界坐标系的变
  14. 网络诊断 网络连接配置
  15. 百宝云常用运算符教程
  16. 计算机网络——网络层:控制层面
  17. 计算机内存容量影响游戏的吗,内存容量对整机游戏性能影响有多大?
  18. 你办培训机构还不知道教育培训管理系统?
  19. 国外著名大学(计算机,通信及电子方面学院)
  20. Cocos技术派 | TS版属性面板定义高级用法

热门文章

  1. JVM——CPU缓存架构与Java 内存模型
  2. oracle状态blocked,oracle 监听状态为BLOCKED
  3. 王者荣耀4月14日服务器维护,王者荣耀体验服4月14日停机更新 鲁班七号加强!...
  4. bootstraptable 列隐藏_bootstrap中table如何隐藏列?
  5. css3 z-index,z-index的工作原理
  6. 正在从“vetur”获取代码操作_长时间运行 io.Reader 和 io.Writer 操作测算进度和估算剩余时间...
  7. php生成pdf中文断码_Rmarkdown导出中文PDF解决方案
  8. python的三个特性_Python3.9的7个特性
  9. 澄海哪里学机器人编程_少年学机器人编程
  10. python 化学模块_Python chemif包_程序模块 - PyPI - Python中文网