ThreadLocal对request和response的使用

来源:互联网 发布:免费qq好友克隆软件 编辑:程序博客网 时间:2024/05/21 06:34
记得在一篇博文中看到描述threadLocal的一句话:
ThreadLocal除了适用于多线程保证每条线程都有自己的变量副本外,还适用于在线程上下文中共享某些变量值。
这两种说法是有区别的。前者强调的是,使用ThreadLocal对副本做保护,避免同步、加锁,降低效率;后者强调的是,某个变量线程上下文中,A处用到、B处用到、C处用到,先在入口处set一个值,后使用ThreadLocal的get方法直接在需要用到的地方拿这个值。
项目中,最近理由cookie存值,使用到了threadLocal这个字段,自己就想去研究下,原理这里跟后者强调的一样,上代码:
1.web.xml里边配置过滤器,拦截请求,做处理
  1. <filter>  
  2.    <filter-name>InterceptorFilter</filter-name>  
  3.    <filter-class>com.fx.anniversary.core.filter.InterceptorFilter</filter-class>  
  4.  </filter>  
  5.  <filter-mapping>  
  6.    <filter-name>InterceptorFilter</filter-name>  
  7.    <url-pattern>/*</url-pattern>  
  8.  </filter-mapping>  
2.赋值
  1. public class InterceptorFilter implements Filter {  
  2.     public void destroy() {  
  3.           
  4.     }  
  5.     public void doFilter(ServletRequest request, ServletResponse response,  
  6.             FilterChain chain) throws IOException, ServletException {  
  7.         HttpServletRequest httpRequest = (HttpServletRequest)request;  
  8.         HttpServletResponse httpResponse = (HttpServletResponse)response;  
  9.         InterceptorContext.setRequest(httpRequest);  
  10.         InterceptorContext.setResponse(httpResponse);  
  11.         try{  
  12.             chain.doFilter(request, response);  
  13.         }finally//不管有木有出现异常,finally块中代码都会执行;在这里,相当于只服务于当前请求。  
  14.             InterceptorContext.removeRequest();  
  15.             InterceptorContext.removeResponse();  
  16.         }  
  17.     }  
  18.     public void init(FilterConfig filterConfig) throws ServletException {  
  19.           
  20.     }  
  21. }  
3.InterceptorContext实体
  1. public class InterceptorContext {  
  2.     private static ThreadLocal<httpservletrequest> _request = new ThreadLocal<httpservletrequest>();  
  3.     private static ThreadLocal<httpservletresponse> _response = new ThreadLocal<httpservletresponse>();  
  4.     public static void setRequest(HttpServletRequest request) {  
  5.         _request.set(request);  
  6.     }  
  7.     public static HttpServletRequest getRequest() {  
  8.         HttpServletRequest request = _request.get();  
  9.         return request;  
  10.     }  
  11.     public static void removeRequest() {  
  12.         _request.remove();  
  13.     }  
  14.       
  15.     public static void setResponse(HttpServletResponse response) {  
  16.         _response.set(response);  
  17.     }  
  18.   
  19.     public static HttpServletResponse getResponse() {  
  20.         HttpServletResponse response = _response.get();  
  21.         return response;  
  22.     }  
  23.   
  24.     public static void removeResponse() {  
  25.         _response.remove();  
  26.     }  
  27.       
  28. }  
  29. </httpservletresponse></httpservletresponse></httpservletrequest></httpservletrequest>  
4.项目中的开始调用。(因为这两个方法调用的地方太多,每次都带一个参数也比较繁琐,所以采用这种方式,文章开头总结过)iew pl
  1. public String getAttribute(String key) {  
  2.         HttpServletRequest request = InterceptorContext.getRequest();  
  3.         Cookie[] cookies = request.getCookies();  
  4.         if(cookies != null){  
  5.             for(Cookie cookie : cookies){  
  6.                 if(cookie.getName().equals(key)){  
  7.                     return cookie.getValue();  
  8.                 }  
  9.             }  
  10.         }  
  11.           
  12.         return "";  
  13.     }  
  14.   
  15.     @Override  
  16.     public void setAttribute(String key,String value){  
  17.         HttpServletResponse response = InterceptorContext.getResponse();  
  18.         Cookie cookie = new Cookie(key,value);  
  19.         response.addCookie(cookie);  
  20.     }  

转载:http://blog.csdn.net/buyaoshuohua1/article/details/77972038
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 赠刘景文/冬景 一暝三冬 冬月 冬枣功效 冬枣热量 孕妇吃冬枣 沾化冬枣 冬枣上火 冬枣好处 冬枣图片 冬枣上火吗 冬枣香蕉 香蕉冬枣 冬枣保存 大荔冬枣 减肥吃冬枣 冬枣的热量 经期吃冬枣 香蕉和冬枣 冬枣红枣 冬枣拉肚子 冬枣吃多了 冬枣和香蕉 冬枣2号 冰糖炖冬枣 螃蟹冬枣 冬枣网 冬枣的功效 脆冬枣 冬枣树苗 冬枣苗 冬枣基地 冬枣产地 冬枣的好处 冬枣价格 冬枣孕妇 短枝冬枣 冬枣价钱 冬枣的产地 冬枣新品种