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

深入webwork(三)

阅读更多

这里把webwork的工作流程作一个简单的记录吧,算是这里看源码的总结:

当一个*.action请求过来之后 ,被com.opensymphony.webwork.dispatcher.ServletDispatcher这个类截获,很自然这个Servlet首先会调用

java 代码
  1. public void init(ServletConfig servletConfig) throws ServletException {   
  2.       super.init(servletConfig);   
  3.       DispatcherUtils.initialize(getServletContext());   
  4.   }  
这个方法先进行一些初始化工作,它最终调用DispatcherUtils的init()方法做初始化工作,init()方法通过调用default.properties这样的属性文件进行初始化,初始化工作结束后调用
java 代码
  1. public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException   

这个方法,剩下所有事情都发生到这里了~~~~

java 代码
  1. public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException {   
  2.        DispatcherUtils du = DispatcherUtils.getInstance();   
  3.        //根据前面的初始数据对字符集、本地化等一些基本信息进行设置   
  4.        du.prepare(request, response);   
  5.        //(一)、通过request对象,读取URL来得到action的name和methodName   
  6.        ActionMapping mapping = ActionMapperFactory.getMapper().getMapping(request);   
  7.        if (mapping == null) {   
  8.            try {   
  9.                response.sendError(404);   
  10.            } catch (IOException e) {   
  11.                LOG.error("Could not send 404 after not finding any ActionMapping", e);   
  12.            }   
  13.            return;   
  14.        }   
  15.   
  16.        try {   
  17.         //对HttpServletRequest进行了包装   
  18.            request = du.wrapRequest(request, getServletContext());   
  19.        } catch (IOException e) {   
  20.            String message = "Could not wrap servlet request with MultipartRequestWrapper!";   
  21.            LOG.error(message, e);   
  22.            throw new ServletException(message, e);   
  23.        }   
  24.        //转发继续处理   
  25.        du.serviceAction(request, response, getServletContext(), mapping);   
  26.    }  

在这里有必要看一下上面的(一)发生了什么

首先通过工厂类来得到一个ActionMaper的实例,ActionMaper就是提供一个request到action的mapping(映射),它其实做很少的工作,它并不会去考虑这个映射的合法性。工厂类通过读取default.properties属性文件里的

  1. webwork.mapper.class=com.opensymphony.webwork.dispatcher.mapper.DefaultActionMapper  

 得到要实例化那个对象,这个对象会根据URL得到nameSpace,actionnName,methodNamet等信息。最后转发到DispatcherUtils对象的serviceAction(request, response, getServletContext(), mapping);方法继续处理。

在这个方法中做的主要工作就是创建一个DefaultActionProxy对象,它是ActionProxy默认实现,它就是一个从webwork到xwork的action之间的一个桥梁

在DefaultActionProxy的构建函数中,有通过

  1. config = ConfigurationManager.getConfiguration().getRuntimeConfiguration().getActionConfig(namespace, actionName);//这里完成解析xwork.xml的工作  

 这段代码解析xwork.xml文件,实际上它最后通过XmlConfigurationProvider这个类进行XML文件的解析,在DefaultActionProxy这个对象的构建过程中还会创建一个DefaultActionInvocation对象,它是ActionInvocation的默认实现,action执行就是在这里完成的,包括所有interptors和action执行后的result的执行,都在这里完成,这个类的关键是invoke()这个方法,

java 代码
  1.  public String invoke() throws Exception {   
  2.         if (executed) {   
  3.             throw new IllegalStateException("Action has already executed");   
  4.         }   
  5.         //执行interceptors,这里用的责任链模式,最好看一下这个模式,才能对这段代码怎么运行有一个更好的理解   
  6.         if (interceptors.hasNext()) {   
  7.             Interceptor interceptor = (Interceptor) interceptors.next();   
  8.             resultCode = interceptor.intercept(this);   
  9.         } else {   
  10.             //在action之后调用Action类中的方法,并返回result代码   
  11.             resultCode = invokeActionOnly();   
  12.         }   
  13.   
  14.         // this is needed because the result will be executed, then control will return to the Interceptor, which will   
  15.         // return above and flow through again   
  16. //      这里干什么不太清楚   
  17.         if (!executed) {   
  18.             if (preResultListeners != null) {   
  19.                 for (Iterator iterator = preResultListeners.iterator();   
  20.                      iterator.hasNext();) {   
  21.                     PreResultListener listener = (PreResultListener) iterator.next();   
  22.                     listener.beforeResult(this, resultCode);   
  23.                 }   
  24.             }   
  25. //            在这里执行result   
  26.             if (proxy.getExecuteResult()) {   
  27.                 executeResult();   
  28.             }   
  29.   
  30.             executed = true;   
  31.         }   
  32.   
  33.         return resultCode;   
  34.     }  

 这就是一个*.action请的一个大概的执行流程

 

分享到:
评论

相关推荐

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    1. **MVC模式**:WebWork1.4遵循MVC架构,将应用程序分为模型、视图和控制器三个部分,提高了代码的可维护性和可扩展性。模型负责业务逻辑,视图负责数据显示,控制器则协调模型和视图的交互。 2. **动作映射**:...

    WebWork深入浅出

    WebWork深入浅出:WebWork是一个由OpenSymphony组织开发的J2EE Web框架,专注于组件化和代码重用。它以其简洁、灵活和功能强大而著称,采用标准的Command模式实现,与web层分离。WebWork的核心组件包括Xwork,提供了...

    webwork源码底层实现

    1. **MVC模式**:WebWork基于MVC模式设计,它将应用程序的逻辑分为三部分:模型负责业务处理,视图负责数据展示,控制器负责接收请求并调用模型进行处理,最后更新视图。 2. **Action Mapping**:WebWork的核心是...

    webWork

    这个“webWork中文教程”旨在帮助开发者深入理解WebWork框架的原理、特性和实践方法。下面,我们将详细介绍WebWork的核心概念、主要功能以及如何通过学习文档来提升开发技能。 一、WebWork概述 WebWork是由Apache...

    webwork深入浅出

    ### WebWork深入浅出 #### 一、引言 随着互联网技术的发展,Web应用程序的复杂度日益增加。为了更好地管理这种复杂性,开发者们引入了多种框架和技术来简化开发过程。其中,WebWork框架作为一款优秀的Java Web开发...

    WebWork2.0讲解说明

    通过深入学习和理解WebWork2.0,开发者可以提升Web应用开发的效率,创建出高效、可维护的Java Web项目。提供的`WebWork2.ppt`文件应包含详细的PPT讲解,可以帮助读者更直观地了解WebWork2.0的各个方面,包括概念、...

    webwork_框架文档

    WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在早期的Web开发中扮演了重要的角色,尤其是在...通过深入研究WebWork,开发者可以了解到早期MVC框架的设计思想,同时也能提升自己的Java Web开发技能。

    webwork的jar包

    WebWork 是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中被广泛使用。...对于希望深入了解WebWork或者想要构建这样的集成应用的开发者来说,这些jar包和相关的资源是非常宝贵的。

    webwork2开发指南

    本指南将深入探讨WebWork2的基础知识、快速入门方法以及高级特性,以帮助开发者更好地理解和应用这一框架。 一、WebWork2基础知识 1. MVC模式:WebWork2遵循MVC设计模式,其中模型(Model)负责处理业务逻辑,视图...

    Webwork2开发指南

    本指南将深入探讨Webwork2的核心概念、配置、以及实际开发中的应用。 **1. Webwork2 架构概述** Webwork2 的架构基于MVC设计模式,旨在分离业务逻辑、视图展示和用户交互。模型(Model)层负责处理数据和业务逻辑,...

    webwork

    在深入研究WebWork源码时,开发者可以了解其内部的工作原理,包括请求处理流程、模型绑定、拦截器链的执行、异常处理机制等,这对于提高编程技能和理解MVC框架的设计模式非常有帮助。此外,查看`displaytag-1.0`源码...

    webwork深入浅出学习资料

    《深入解析WebWork框架:构建高效Web应用的基石》 WebWork框架,作为J2EE领域内备受推崇的Web开发框架之一,自诞生以来便以其卓越的性能、灵活性及易于集成的特点,在众多开发者中赢得了广泛的认可。《WebWork深入...

    WebWork docs 2 -- webWork 详细的说明文档

    通过对WebWork docs 2 的深入学习,开发者能够熟练掌握WebWork框架,从而更高效地构建企业级Java Web应用。这个文档集合是一个宝贵的资源,无论你是初学者还是经验丰富的开发者,都能从中获益。

    webWork2开发指南

    通过阅读"webWork2guide.pdf",你将深入理解WebWork2框架的各个方面,并掌握如何有效地利用它来开发高质量的Web应用。这份指南将指导你完成从项目初始化、Action编写、视图渲染到部署上线的全过程,是学习WebWork2...

    WebWork深入浅出.rar

    三、WebWork的特性 1. 强大的表单绑定和类型转换:WebWork自动将HTTP请求参数绑定到动作类的属性,并进行类型转换,简化了表单数据处理。 2. 异常处理:WebWork提供了全局异常处理机制,可以统一处理未捕获的异常,...

    WebWork教程

    WebWork的项目资源和参考资料部分提供了学习该框架所必需的资源链接,包括官方文档、社区论坛和博客等,这些都是学习和深入了解WebWork的好途径。 总之,WebWork是一个功能强大的Java Web框架,它通过组件化和代码...

Global site tag (gtag.js) - Google Analytics