Struts2的工作原理4

来源:互联网 发布:高等电网络理论 编辑:程序博客网 时间:2024/06/06 19:26

代码清单9:FilterDispatcher.init()方法

   public void init(FilterConfig filterConfig) throws ServletException {

       this.filterConfig = filterConfig;      

       dispatcher = createDispatcher(filterConfig);

       dispatcher.init();      

       String param = filterConfig.getInitParameter("packages");

       String packages ="org.apache.struts2.static template org.apache.struts2.interceptor.debugging";

       if(param !=null) {

             packages = param +" "+ packages;

       }

       this.pathPrefixes= parse(packages);

}

代码清单10:FilterDispatcher.createDispatcher()方法

   protected Dispatcher createDispatcher(FilterConfig filterConfig) {

       Map<String,String> params =newHashMap<String,String>();

       for(Enumeration e = filterConfig.getInitParameterNames(); e.hasMoreElements(); ) {

           String name = (String) e.nextElement();

           String value = filterConfig.getInitParameter(name);

           params.put(name, value);

       }

       return new Dispatcher(filterConfig.getServletContext(), params);

    }

   当用户向Struts2发送请求时,FilterDispatcher的doFilter()方法自动调用,这个方法非常关键。首先,Struts2对请求对象进行重新包装,此次包装根据请求内容的类型不同,返回不同的对象,如果为multipart/form-data类型,则返回MultiPartRequestWrapper类型的对象,该对象服务于文件上传,否则返回StrutsRequestWrapper类型的对象,MultiPartRequestWrapper是StrutsRequestWrapper的子类,而这两个类都是HttpServletRequest接口的实现。包装请求对象如代码清单11所示:

代码清单11:FilterDispatcher.prepareDispatcherAndWrapRequest()方法