zoukankan      html  css  js  c++  java
  • spring aop 获取request、response对象

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

    1.在web.xml中添加监听

    <listener>  
            <listener-class>  
                org.springframework.web.context.request.RequestContextListener  
            </listener-class>  
    </listener>

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

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

    或者

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

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

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

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

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class SysContent {
        private static ThreadLocal<HttpServletRequest> requestLocal = new ThreadLocal<HttpServletRequest>();
        private static ThreadLocal<HttpServletResponse> responseLocal = new ThreadLocal<HttpServletResponse>();
    
        public static HttpServletRequest 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 static HttpSession getSession() { return (HttpSession) ((HttpServletRequest) requestLocal.get()).getSession(); } }

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

    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class InitContent implements Filter {
    
        @Override
        public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
                throws IOException, ServletException {
            SysContent.setRequest((HttpServletRequest) arg0);
            SysContent.setResponse((HttpServletResponse) arg1);
            arg2.doFilter(arg0, arg1);
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
        }
        @Override
        public void destroy() {
        }
    
    }

    web.xml

        <filter>
            <filter-name>InitContent</filter-name>
            <filter-class>com.*.filter.InitContent</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>InitContent</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

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

    HttpServletRequest request = SysContent.getRequest();
    HttpServletResponse response = SysContent.getResponse();
    HttpSession session = SysContent.getSession();

  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/qlong8807/p/7573175.html
Copyright © 2011-2022 走看看