在Struts1的一般方法中,使用ThreadLocal获取response,request,session

1:ThreadLocal 方法

package com.rtt.cppcc.basicinfo.util;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletUtil {
 
 private ServletContext context;
 private HttpServletRequest request;
 private HttpServletResponse response;
 private HttpSession session;
 
 
 private final static ThreadLocal<ServletUtil> contexts = new ThreadLocal<ServletUtil>();
 
 /**
  * 初始化请求上下文
  * @param ctx
  * @param req
  * @param res
  */
 public static ServletUtil begin(ServletContext  ctx, HttpServletRequest req, HttpServletResponse res) {
  ServletUtil rc = new ServletUtil();
  rc.context = ctx;
  rc.request = req;
  rc.response = res;
  rc.session = req.getSession(false);
  
  contexts.set(rc);
  return rc;
 }
 
 /**
  * 获取当前请求的上下文
  * @return
  */
 public static ServletUtil get(){
  return contexts.get();
 }
 

 public void end() {
  this.context = null;
  this.request = null;
  this.response = null;
  this.session = null;
  contexts.remove();
 }

 public HttpSession getSession() {
  return session;
 }

 public void setSession(HttpSession session) {
  this.session = session;
 }

 public ServletContext getContext() {
  return context;
 }

 public void setContext(ServletContext context) {
  this.context = context;
 }


 public HttpServletRequest getRequest() {
  return request;
 }

 public void setRequest(HttpServletRequest request) {
  this.request = request;
 }

 public HttpServletResponse getResponse() {
  return response;
 }

 public void setResponse(HttpServletResponse response) {
  this.response = response;
 }
}

2:过滤器

package com.rtt.cppcc.basicinfo.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletFilter implements Filter {
 private ServletContext context;
 @Override
 public void destroy() {
  // TODO Auto-generated method stub
  ServletUtil.get().end();//清除线程变量值

 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  // TODO Auto-generated method stub
  HttpServletRequest req = (HttpServletRequest)request;
  HttpServletResponse res = (HttpServletResponse)response;
  ServletUtil.begin(this.context, req, res);//初始化线程变量值
  chain.doFilter(request, response);
 }

 @Override
 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub
  
 }
 
}

3:在web.xml 中配置过滤器

<filter>
  <filter-name>Response</filter-name>
  <filter-class>com.rtt.cppcc.basicinfo.util.ServletFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>Response</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

4::获取对象

HttpServletResponse res = (HttpServletResponse) ServletUtil.get().getResponse();

参考地址:https://my.oschina.net/yyqz/blog/277359

猜你喜欢

转载自47585351.iteye.com/blog/2325611