SpringMVC--RequestContextListener
来源:互联网 发布:dracut命令安装linux 编辑:程序博客网 时间:2024/06/12 12:06
简介
使用SpringMVC作为web应用的框架是一般都会涉及Request,Session等,RequestContextListener就是为此定义的。
详解
首先分清web容器和Spring容器的区别,这是两个东西,Web容器表示装载,执行和处理web应用的容器,比如Tomcat,Jetty等,而Spring容器则是BeanFactory,applicationContext,WebApplicationContext等。
在此之前讨论了ContextLoaderListener监听器的作用,它是针对web容器(Tomcat或Jetty等)的启动和关闭行为,在web容器启动时会通过事件获取ServletContext,同时初始化WebApplicationContext并把ServletContext实例注入到WebApplicationContext当中。
这里讨论的RequestContextListener则是监听客户端对web应用的每一个请求,当每一个请求到达的时候都会触发这个监听器执行,从源码可知它主要是获取当前请求实例并且将实例注入到一些公用的实例当中,我当前的猜想是,这些实例应该会被框架其他部分调用。
web应用在定义bean的时候有一个作用域的概念,主要有:singleton(默认),Propertype,还有WebApplicationContext独有的Request,Session,GlobalSession,具体有什么区别去查。如果Spring的Bean需要用到Request,Session,GlobalSession作用域就必须进行配置,目前知道的有两种方法
第一:低版本web容器
<filter> <filter-name>RequestContextFilter</filter-name> <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class> </filter> <filter-mapping> <filter-name>RequestContextFilter</filter-name> <servlet-name>/*</servlet-name> </filter-mapping>第二:高版本web容器
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
RequestContextListener监听器源码:
public class RequestContextListener implements ServletRequestListener {private static final String REQUEST_ATTRIBUTES_ATTRIBUTE =RequestContextListener.class.getName() + ".REQUEST_ATTRIBUTES";@Overridepublic void requestInitialized(ServletRequestEvent requestEvent) {if (!(requestEvent.getServletRequest() instanceof HttpServletRequest)) {throw new IllegalArgumentException("Request is not an HttpServletRequest: " + requestEvent.getServletRequest());}HttpServletRequest request = (HttpServletRequest) requestEvent.getServletRequest();ServletRequestAttributes attributes = new ServletRequestAttributes(request);request.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes);LocaleContextHolder.setLocale(request.getLocale());RequestContextHolder.setRequestAttributes(attributes);}@Overridepublic void requestDestroyed(ServletRequestEvent requestEvent) {ServletRequestAttributes attributes = null;Object reqAttr = requestEvent.getServletRequest().getAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE);if (reqAttr instanceof ServletRequestAttributes) {attributes = (ServletRequestAttributes) reqAttr;}RequestAttributes threadAttributes = RequestContextHolder.getRequestAttributes();if (threadAttributes != null) {// We're assumably within the original request thread...LocaleContextHolder.resetLocaleContext();RequestContextHolder.resetRequestAttributes();if (attributes == null && threadAttributes instanceof ServletRequestAttributes) {attributes = (ServletRequestAttributes) threadAttributes;}}if (attributes != null) {attributes.requestCompleted();}}}
- SpringMVC--RequestContextListener
- SpringMVC RequestContextListener配置问题
- RequestContextListener
- SpringMVC xml 一些配置:RequestContextListener, JdbcHttpSessionConfiguration 作用
- Mock RequestContextListener
- RequestContextListener作用
- ContextLoaderListener RequestContextListener
- Spring RequestContextListener简介
- RequestContextListener与ContextLoaderListener的关系
- RequestContextListener与ContextLoaderListener的区别
- RequestContextListener与ContextLoaderListener的区别
- RequestContextListener与ContextLoaderListener的关系
- ContextLoaderListener与RequestContextListener配置问题
- Spring源码分析之RequestContextListener
- org.springframework.web.context.request.RequestContextListener
- Spring的作用域以及RequestContextListener作用
- org.springframework.web.context.request.RequestContextListener作用
- Spring的作用域以及RequestContextListener作用
- dede advancedsearch.htm 头部,尾部标签无法识别! 无法识别channel 或者 channelartlist
- nyist——ACM新生牛刀小试 Round#1题解
- C# --Winfrom-添加学员对象同步列表展示优化
- jQuery的页面传值,解析json字符串
- Android学习-常见的UI控件 监听按钮的点击事件
- SpringMVC--RequestContextListener
- HDU 4778 Gems Fight! 【记忆化搜索+位操作】
- POJ 2976 Dropping tests 01分数规划Dinkelbach算法
- 流程图
- Linux文件操作解析
- [JavaScript][AJAX]封装好的AJAX工具类
- DES代码讲解
- Java 应用发布后,需要关注的7个性能指标
- gcc工作流程