`
leng_cn
  • 浏览: 298289 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WebWork2.2工作原理总结

阅读更多
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
配置,创建对象创建的工厂ObjectFactoryObjectTypeDeterminer。至此完成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调用的方法

private
void 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";
            }
        }
}
然后调用DispatcherUtilsserviceAction方法中的
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+spring +SpringMVC组合 例子

    webwork2.2例子带有lib包

    webwork2.2例子带有lib包,针对刚入手的同事

    WebWork 2.2新特性的PPT.rar

    WebWork 2.2新特性的PPT.rar

    webwork2.2

    webwork2.2.jar 类包 web work2

    WebWork2.2入门

    调试webwork(没有调试成功) 博文链接:https://lwfshr.iteye.com/blog/137548

    webwork-2.2.2

    webwork的包。webwork开发者不可缺少的

    webwork2个人学习总结

    学习很好用,个人总结,技术有限,如有错误,望请原谅!

    webwork工作机制

    WebWork2 工作原理总结 一、WebWork的框架初始化过程 

    webwork-2.1.7 xwork.jar

    webwork 2.1.7 版 原版留存 xwork.jar

    webwork详细讲解.doc

    webwork的讲解,详细的讲解了webwork的工作原理 还有例子可供参考

    STRUTS2.0学习

    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的源文件压缩包

    WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包

Global site tag (gtag.js) - Google Analytics