posts - 35,  comments - 6,  trackbacks - 0
一、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;
}    
1.   完成对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";
            }
        }
}
然后调用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的执行流程图
 
posted on 2009-07-08 11:09 NG 阅读(227) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(1)

随笔档案(35)

文章分类(5)

文章档案(2)

新闻档案(5)

java link

搜索

  •  

最新评论

阅读排行榜

评论排行榜