您的位置:首页 > 编程语言 > Java开发

Struts2的工作原理4

2013-08-02 16:48 232 查看
代码清单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()方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: