欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

struts的request包装替换的思想

程序员文章站 2022-04-25 17:43:24
...

request包装替换的思想

 

StrutsRequestWrapper包装了HttpServletRequestWrapper,所以在struts中用的request是StrutsRequestWrapper

想这种要包装原有的:

1,覆盖,重写  

 

 

 

2,重写包装,在后面这个之前传入重写的类(用多态的方式)

 

传入时机是使用前即可,对于request就在最前面的过滤器

 

一进来第一个过滤器就这样设置(顺序最前的)

 

 

(一)(自己实现requset包装)

 * <p>拦截http请求</p>

 * @author houzhanshan

 * @version $Id: SessionFilter.java, v 0.1 2017年5月26日 下午11:55:26 houzhanshan Exp $

 */

@WebFilter("/*")

public class SessionFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

 

      //包装入口

        chain.doFilter(new RemoteSessionRequest((HttpServletRequest) request), response);

        

    }

 

    public void destroy() {

        // TODO Auto-generated method stub

 

    }

 

    public void init(FilterConfig arg0) throws ServletException {

        // TODO Auto-generated method stub

 

    }

}

 

 

 

(二)、struts对request的包装(思路和第一种一致)

 

public class StrutsRequestWrapper extends HttpServletRequestWrapper

 

 

 

struts的入口点:

 

 

StrutsPrepareAndExecuteFilter

 

  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

 

        HttpServletRequest request = (HttpServletRequest) req;

        HttpServletResponse response = (HttpServletResponse) res;

 

        try {

            if (excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {

                chain.doFilter(request, response);

            } else {

                prepare.setEncodingAndLocale(request, response);

                prepare.createActionContext(request, response);

                prepare.assignDispatcherToThread();

//包装的开始

                request = prepare.wrapRequest(request);

                ActionMapping mapping = prepare.findActionMapping(request, response, true);

//后继使用

                if (mapping == null) {

                    boolean handled = execute.executeStaticResourceRequest(request, response);

                    if (!handled) {

                        chain.doFilter(request, response);

                    }

                } else {

                    execute.executeAction(request, response, mapping);

                }

            }

        } finally {

            prepare.cleanupRequest(request);

        }

    }

 

相关标签: request 包装