WebWork2.2工作原理总结
一、WebWork的框架初始化过程
利用WebWork做的项目,在服务器启动时完成WebWork的框架初始化。具体是通过Web.xml中配置好的FilterDispatcher过滤器中的init(FilterConfig filterConfig)方法完成。并且web.xml中配置好FilterDispatcher的映射,当用户用映射好的结尾资源请求浏览器时,FillterDispather会进行请求处理.
具体实现是通过以下步骤:
1、 通过FilterDispatcher中的
public void init(FilterConfig filterConfig) throws ServletException方法,进行框架的初始化
2、 Init方法又同过调用DispatcherUtils类的public static void initialize(ServletContext servletContext)方法创建DispatcherUtils实例,同时间接调用DispatcherUtils类的protected void init(ServletContext servletContext)方法初始化Configuration
配置,创建对象创建的工厂ObjectFactory和ObjectTypeDeterminer。至此完成WebWork框架的初始化。
二、WebWork的用户请求处理过程
所有以web.xml中映射FilterDispatcher结尾的服务请求将由FilterDispatcher进行处理。
1、从用户请求的服务名中解析出对应Action的名称。
具体完成是:户按webwork规则请求时,服务器会调用FilterDispatcher的doFilter方法,完成第二步的内容。
2、遍历 HttpServletRequest、HttpSession、ServletContext 中的数据,并将其复制到Webwork的Map中,为下一步创建Action事例打下基础。
具体完成是:过调用DispatcherUtils的serviceAction方法中的
Map extraContext = createContextMap(request, response, mapping, context);
完成以上信息的封装。
3、以上一步封装好的信息为参数,调用 ActionProxyFactory创建对应的 ActionProxy实例。ActionProxyFactory 将根据 Xwork 配置文件(xwork.xml)中的设定,创建ActionProxy实例,ActionProxy中包含了 Action的配置信息(包括 Action名称,对应实现类等等)。
具体完成是:通过
ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(namespace, name, extraContext, true, false);//创建动态代理
DefaultActionProxyFactory实现ActionProxyFactory的createActionProxy方法,返回new DefaultActionProxy(namespace, actionName, extraContext, true, true);
DefaultActionProxy是对ActionProxy的默认实现,
通过DefaultActionProxy 类的DefaultActionProxy(namespace, actionName, extraContext, true, true)构造方法实例化DefaultActionProxy,同时得到用户请求的actionName及namespace,并通过
config = ConfigurationManager.getConfiguration().getRuntimeConfiguration().getActionConfig(namespace, actionName);
ConfigurationManager的
publicstaticsynchronized Configuration getConfiguration() {
if (configurationInstance == null) {
configurationInstance = new DefaultConfiguration();
try {
configurationInstance.reload();
} catch (ConfigurationException e) {
configurationInstance = null;
throw e;
}
} else {
conditionalReload();
}
returnconfigurationInstance;
}
完成对xwork.xml(具体操作类是XmlConfigurationProvider)配置信息的读取。获得与此次请求相关的ActionConfig
4、ActionProxy创建对应的Action实例,并根据配置进行一系列的处理程序。
通过DefaultActionProxy类的
invocation = ActionProxyFactory.getFactory().createActionInvocation(this, extraContext);
//通过createActionInvocation方法创建动作调用类ActionInvocation,处理被Action调用的方法
privatevoid resolveMethod() {
// if the method is set to null, use the one from the configuration
// if the one from the configuration is also null, use "execute"
if (!TextUtils.stringSet(this.method)) {
this.method = config.getMethodName();
if (!TextUtils.stringSet(this.method)) {
this.method = "execute";
}
}
}
然后调用DispatcherUtils的serviceAction方法中的
if (mapping.getResult() != null) {
Result result = mapping.getResult();
result.execute(proxy.getInvocation());
} else {
proxy.execute();
}
完成用户的最终要执行的action方法。
public String execute() throws Exception {
ActionContext nestedContext = ActionContext.getContext();
ActionContext.setContext(invocation.getInvocationContext());
String retCode = null;
try {
retCode = invocation.invoke();
} finally {
if (cleanupContext) {
ActionContext.setContext(nestedContext);
}
}
return retCode;
}
最终处理ActionContext对象
将Action调用提交给ActionInvocation处理
三、WebWork的执行流程图
<v:shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f" id="_x0000_t75"> </v:shapetype>
分享到:
相关推荐
webWork2.2+spring +SpringMVC组合 例子
webwork2.2例子带有lib包,针对刚入手的同事
WebWork 2.2新特性的PPT.rar
webwork2.2.jar 类包 web work2
调试webwork(没有调试成功) 博文链接:https://lwfshr.iteye.com/blog/137548
webwork的包。webwork开发者不可缺少的
学习很好用,个人总结,技术有限,如有错误,望请原谅!
WebWork2 工作原理总结 一、WebWork的框架初始化过程
webwork 2.1.7 版 原版留存 xwork.jar
webwork的讲解,详细的讲解了webwork的工作原理 还有例子可供参考
STRUTS2.0和1.0有比较大的差异....而在Webwork 2.2之前的Webwork版本,其自身有一套控制反转的实现,Webwork 2.2在Spring 框架的如火如荼发展的背景下,决定放弃控制反转功能的开发,转由Spring实现。
作者:钱安川 前言 本篇文章并没有太多WebWork 的实战代码细节。...围绕着纵轴,我们按照横轴的顺序逐步描述讲解:WebWork简介、WebWork入门、WebWork原理、WebWork实战和技巧、展望WebWork未来、最后是本文的总结。
这个包是有关webwork的一个包,可以知道他的工作流程
webwork工作原理作了清楚的讲述。画了重点,非常适合初学阅读时抓住重点。
webwork简单实例及说明详细地将如何部署Webwork,如何搭建开发webwork的环境,webwork到工作原理与工作流程详细地做了讲解,只要自己动手将小例子做一遍,肯定能够掌握初步的开发技术。希望能对各位有所帮助!
WEBWORK的配置
webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程
WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包