Struts2源码解析(1)
?
StrutsPrepareAndExecuteFilter类 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; try { //设置request的characterEncoding属性为struts.i18n.encoding的值 ?prepare.setEncodingAndLocale(request, response); //创建ActionContext ?prepare.createActionContext(request, response); //通过ThreadLocal将Dispatcher对象绑定到当前线程 ?prepare.assignDispatcherToThread(); //以struts.action.excludePattern属性值为后缀的不处理 ?if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {chain.doFilter(request, response);} else { //如果上传文件,对request对象进行重新包装 ?request = prepare.wrapRequest(request); //解析url,将满足的值namespace,name,method的值放入ActionMapping ?ActionMapping mapping = prepare.findActionMapping(request, response, true);if (mapping == null) {// struts.serve.static属性配置为true,且在"/struts","/static"路径下资源增加浏览器缓存,设置Expires属性为一天 boolean handled = execute.executeStaticResourceRequest(request, response);if (!handled) {chain.doFilter(request, response);}} else {execute.executeAction(request, response, mapping);}} } finally { //回收资源 ?prepare.cleanupRequest(request); } }