struts的request包装替换的思想
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);
}
}
推荐阅读
-
struts2的textfield标签value从request中取默认值 博客分类: 随笔struts2 struts2标签textfieldrequest默认值
-
struts2之3--Action类的包装
-
struts2的action中获得request response session
-
struts2的action中获得request response session
-
Struts2获取request的几种方式汇总
-
Struts2的request session
-
struts2标签获取parameter,request,session,application中的值
-
struts2之3--Action类的包装
-
struts的request包装替换的思想
-
request包装的,实现request属性共享内存管理