Struts2源码解析(1)

   一. Struts2的整体架构图

 


 

 

    二.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);
                                 //用ActionMapper接口的实现解析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 {
            //释放ActionContext,Dispatcher与当前线程绑定的ThreadLocal,回收资源 
            prepare.cleanupRequest(request);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值