`
leng_cn
  • 浏览: 301947 次
  • 性别: 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个人学习总结

    Webwork2作为一个早期的Java Web框架,虽然现在已被Struts2所替代,但其设计理念和机制对理解现代MVC框架的工作原理仍然有价值。学习Webwork2可以帮助开发者更好地理解和掌握MVC架构,以及拦截器、配置文件等核心...

    webwork2教程

    为了更深入地理解 WebWork2 的工作原理,我们将通过一个简单的“HelloWebWorld”示例来进行详细解析。 ##### 3.1 xwork.xml 文件配置 ```xml &lt;include file="webwork-default.xml"/&gt; ...

    Struts 2权威指南--基于WebWork核心的MVC开发

    为了更好地理解Struts 2的工作原理,我们可以通过一个简单的“Hello World”示例来入门。 **2.1 环境搭建** 首先,需要搭建一个支持Struts 2的开发环境,这通常包括安装Java SDK、配置开发工具(如Eclipse)、导入...

    struts2最佳实践,实例学习

    为了更好地理解Struts2的工作原理,我们可以手动创建一个简单的“Hello World”示例程序。 ##### 2.1 准备环境 - JDK版本:1.5及以上版本(推荐使用1.6或更高版本)。 - Tomcat版本:5.5及以上版本。 假设当前...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.2. 容器和bean的基本原理 3.2.1. 容器 3.2.1.1. 配置元数据 3.2.2. 实例化容器 3.2.2.1. 组成基于XML配置元数据 3.2.3. 多种bean 3.2.3.1. 命名bean 3.2.3.2. 实例化bean 3.2.4. 使用容器 3.3. 依赖 3.3.1. 注入...

    Spring 2.0 开发参考手册

    2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. ...

    spring chm文档

    2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. ...

    Spring中文帮助文档

    2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加...

    Spring API

    2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加...

    webx3框架指南PDF教程附学习Demo

    2.2. SpringExt原理 ......................................................................................... 16 2.2.1. XML Schema中的秘密 ...............................................................

Global site tag (gtag.js) - Google Analytics