博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMvc源码学习之:利用springMVC随时随地获取HttpServletRequest等对象
阅读量:7119 次
发布时间:2019-06-28

本文共 1749 字,大约阅读时间需要 5 分钟。

一、准备工作:

在web.xml中添加  

[html]
  1. <listener>      
  2.         <listener-class>      
  3.             org.springframework.web.context.request.RequestContextListener  
  4.         </listener-class>      
  5. </listener>  

 

二、使用方法:
1、方法一:通过代码实现

[java]
  1. HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  

2、方法二:通过注解实现:

[java]
  1. @Autowired  
  2. private  HttpServletRequest request;  
三、关于RequestContextListener的背景知识:

Request作用域 
<bean id="loginAction" class="com.foo.LoginAction" scope="request"/> 

针 对每次HTTP请求,Spring容器会根据loginAction bean定义创建一个全新的LoginAction bean实例,且该loginAction bean实例仅在当前HTTP request内有效,因此可以根据需要放心的更改所建实例的内部状态,而其他请求中根据loginAction bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。当处理请求结束,request作用域的bean实例将被销毁。 

针 对某个HTTP Session,Spring容器会根据userPreferences bean定义创建一个全新的userPreferences bean实例,且该userPreferences bean仅在当前HTTP Session内有效。与request作用域一样,你可以根据需要放心的更改所创建实例的内部状态,而别的HTTP Session中根据userPreferences创建的实例,将不会看到这些特定于某个HTTP Session的状态变化。当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。 

<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/> 

请注意,假如你在编写一个标准的基于Servlet的web应用,并且定义了一个或多个具有global session作用域的bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误 
二、为什么需要额外的配置RequestContextFilter 
也 许会有一个疑问,已经通过ContextLoaderListener(或ContextLoaderServlet)将Web容器与Spring容器整 合,为什么这里还要用额外的RequestContextListener以支持Bean的另外3个作用域,原因是 ContextLoaderListener实现ServletContextListener监听器接口,而 ServletContextListener只负责监听Web容器的启动和关闭的事件。RequestContextFilter实现 ServletRequestListener监听器接口,该监听器监听HTTP请求事件,Web服务器接收的每次请求都会通知该监听器。通过配置 RequestContextFilter,Spring容器与Web容器结合的更加密切。 
三、作用域依赖问题 
如果将Web相关作用域的Bean注入到singleton或prototype的Bean中,这种情况下,需要Spring AOP

 

"car" class="com.demo.Car" scope="request">  

    <aop:scoped-proxy/>  

</bean>  

"boss" class="com.demo.Boss" >  

"car" ref="car" />  

</bean>  

 

转载地址:http://zlbel.baihongyu.com/

你可能感兴趣的文章
Numpy:高维数组(矩阵)
查看>>
远程桌面不能复制粘贴解决办法
查看>>
(转)Google Dart抗衡JavaScript的十大亮点
查看>>
强大的zsh配置文件
查看>>
Unity 5.1+ Assertion Library (断言库)
查看>>
java并发编程读书笔记(1)-- 对象的共享
查看>>
C# Generator 2D map (随机创建一个2D地表)
查看>>
distribution 中一直在运行 waitfor delay @strdelaytime 语句
查看>>
apache自带的ab压力测试工具用法详解
查看>>
windows和linux下mysql的重启命令
查看>>
第一篇博客
查看>>
backup4:数据库自动备份,自动删除备份文件
查看>>
spring boot(三):Spring Boot中Redis的使用
查看>>
通过DNS通道传输的交互式PowerShell脚本
查看>>
VueJs开发笔记—IDE选择和优化、框架特性、数据调用、路由选项及使用
查看>>
用secureCRT操作ubuntu终端
查看>>
【转】UISearchBar的使用
查看>>
ASP.NET MVC 5 学习教程:添加视图
查看>>
Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
查看>>
C++:多重继承
查看>>