springMvc源码学习之:利用springMVC随时随地获取HttpServletRequest等对象

简介: 一、准备工作: 在web.xml中添加   [html] view plain copy                                   org.springframework.

一、准备工作:

在web.xml中添加  

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


 


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

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




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

[java] view plain copy
  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>  

 
相关文章
【SpringMVC】SpringMVC方式,向作用域对象共享数据(ModelAndView、Model、map、ModelMap)
【SpringMVC】SpringMVC方式,向作用域对象共享数据(ModelAndView、Model、map、ModelMap)
289 1
SpringMVC 域对象共享数据
SpringMVC 域对象共享数据
197 0
SpringMVC之获取请求参数和域对象共享数据
【1月更文挑战第18天】 一、SpringMVC获取请求参数 1、通过ServletAPI获取 2、通过控制器方法的形参获取请求参数 3、@RequestParam 4、@RequestHeader 5、@CookieValue 6、通过POJO获取请求参数 7、解决获取请求参数的乱码问题 二、域对象共享数据 1、使用ServletAPI向request域对象共享数据 2、使用ModelAndView向request域对象共享数据 3、使用Model向request域对象共享数据 4、使用map向request域对象共享数据 5、使用ModelMap向request域对象共享数据
312 0
|
前端开发 Java 应用服务中间件
SpringMVC源码分析之策略对象初始化
SpringMVC源码分析之策略对象初始化
250 0
|
Java Spring
SpringMVC控制层private方法中出现注入的service对象空指针异常
一、现象 SpringMVC中controller里的private接口中注入的service层的bean为null,而同一个controller中访问修饰符为public和protected的方法不会出现这样的问题。 controller中的方法被AOP进行了代理,普通Controller如果没有AOP,private方法中bean也是正常的。
|
Java Spring
springMVC中获取request 对象
springMVC中获取request 对象
277 0
|
存储 JavaScript 前端开发
SpringMVC 域对象共享数据
SpringMVC 域对象共享数据
|
前端开发 Java 应用服务中间件
SpringMVC学习(五):向request域对象共享数据的五种方法
SpringMVC学习(五):向request域对象共享数据的五种方法
317 0
SpringMVC学习(五):向request域对象共享数据的五种方法
|
JSON 前端开发 Java
【Spring MVC】(四)Spring MVC响应视图(字符串的方式、ModelAndView 对象、JSON 数据)、统一异常处理(普通请求、AJAX 请求)
【Spring MVC】(四)Spring MVC响应视图(字符串的方式、ModelAndView 对象、JSON 数据)、统一异常处理(普通请求、AJAX 请求)
908 0
【Spring MVC】(四)Spring MVC响应视图(字符串的方式、ModelAndView 对象、JSON 数据)、统一异常处理(普通请求、AJAX 请求)

热门文章

最新文章