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();

  • 相关阅读:
    PHPCMS V9 导航栏当前栏目高亮
    phpcms v9栏目列表调用每一篇文章内容方法
    PHPCMS V9 为今天或几天前文章加new
    vue.js路由参数简单实例讲解------简单易懂
    vue组件知识总结
    vue.js 利用组件之间通讯,写一个弹出框例子
    vue.js组件之间通讯--父组件调用子组件的一些方法,子组件暴露一些方法,让父组件调用
    vue.js组件之间的通讯-----父亲向儿子传递数据,儿子接收父亲的数据
    vue.js通讯----父亲拿儿子的数据
    git常见操作---由简入深
  • 原文地址:https://www.cnblogs.com/qlong8807/p/7573175.html
Copyright © 2011-2022 走看看