java创建response对象_spring aop 获取request、response对象详解

在网上看到有不少人说如下方式获取:

1.在web.xml中添加监听

org.springframework.web.context.request.RequestContextListener

2.在aop类中有以下两种方式获取

@Autowired

HttpServletRequest request; //这里可以获取到request

或者

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

但是我试后,发现都获取不到。

既然这样那就要用其他方式获取了。

1. 新建一个存储request、response对象的类

importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;public classSysContent {private static ThreadLocal requestLocal = new ThreadLocal();private static ThreadLocal responseLocal = new ThreadLocal();public staticHttpServletRequest getRequest() {return(HttpServletRequest) requestLocal.get();

}public static void setRequest(HttpServletRequest request) {

requestLocal.set(request);

}

public static HttpServletResponse getResponse() {

return (HttpServletResponse) responseLocal.get();

}

public static void setResponse(HttpServletResponse response) {

responseLocal.set(response);

}public staticHttpSession getSession() {return(HttpSession) ((HttpServletRequest) requestLocal.get()).getSession();

}

}

2. 新建一个filter,并在web.xml中添加filter配置

importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class InitContent implementsFilter {

@Overridepublic voiddoFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throwsIOException, ServletException {

SysContent.setRequest((HttpServletRequest) arg0);

SysContent.setResponse((HttpServletResponse) arg1);

arg2.doFilter(arg0, arg1);

}

@Overridepublic void init(FilterConfig arg0) throwsServletException {

}

@Overridepublic voiddestroy() {

}

}

web.xml

InitContent

com.*.filter.InitContent

InitContent

/*

这样一来,每次请求的request、response都存在了ThreadLocal中,每次需要的时候从里面获取即可

HttpServletRequest request = SysContent.getRequest();

HttpServletResponse response = SysContent.getResponse();

HttpSession session = SysContent.getSession();


版权声明:本文为weixin_31523667原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。