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

Struts源码粗略分析二:代码初探

 
阅读更多

分析范围

仅仅对Struts的基本运行原理进行分析,不包括实现细节以及标签库、插件等非主流程内容的分析,分析流程大致如下

request -> ActionServlet -> ActionForm -> Action -> Forward -> JSP/other rescources

请求 -> 中心应用控制器 -> 数据包装 -> 业务控制器 -> 跳转 -> JSP/其它资源

目录结构分析

源码部分:struts-1.3.10/src/apps/cookbook/src/main/java

运行部分(含*部分的内容在分析范围内):

/struts1/web-app
/struts1/web-app/css
/struts1/web-app/images
/struts1/web-app/jsp
/struts1/web-app/WEB-INF
/struts1/web-app/WEB-INF/lib
/struts1/web-app/WEB-INF/src
/struts1/web-app/WEB-INF/chain-config.xml *
/struts1/web-app/WEB-INF/struts-config-Wildcard.xml *
/struts1/web-app/WEB-INF/struts-config.xml *
/struts1/web-app/WEB-INF/validation.xml *
/struts1/web-app/WEB-INF/web.xml *
/struts1/web-app/index.jsp
/struts1/web-app/source.jsp

基本概念

ActionServlet - Struts中核心组件,用于管理与调度ActionForm、Action等组件,随着应用服务器启动而启动

ActionForm - 对客户端请求时所携带的数据进行包装,并能提供验证功能

Action - 对被请求的内容进行业务控制,执行业务选择与视图派发

Exception - 对Action执行时所发生的异常进行控制

Forward - 提供跳转相关信息

ActionMapping - 对应Struts配置文件,可视为配置文件的内存表现形式

web.xml

注意load-on-startup标签,代表ActionServlet会随着servlet容器启动而启动,也就是说,Struts的核心组件是ActionServlet,一切配置信息都是通过ActionServlet的启动而装载的。看下面代码会更清晰一些。

Struts配置文件struts-config.xml

Struts配置文件内容大致可以分析以下几个内容:

  • form-beans
  • global-exceptions
  • global-forwards
  • action-mappings
  • message-resources
  • plug-in

至于各个部分的配置说明,请参考《Struts - The Complete Reference》与Struts的JavaDoc。

Struts初始化

现在就打开ActionServlet源码,位置是/struts1/struts-1.3.10/src/core/src/main/java/org/apache/struts/action/ActionServlet.java。

init与destory就不看了,大致就是配置信息的初始化校验等,不过init中值得注意的是下面这句:

假如JSP画面中一个checkbox的value值为“是”或“否”,想对应ActionForm中的一个布尔型属性,我们就可以仿照initOther来注册我们自己的转换器,至于怎么用自己查吧:)

处理请求

接下来我们来看看doGet和doPost的方法实现,二者步调一致,统一指向了process方法。如果说ActionServlet是Struts的核心组件,那么RequestProcessor则是ActionServlet的核心,因为从请求发起至完成响应,RequestProcessor负责了全部的调度工作。

接下来进入RequestProcessor的process方法中,代码如下:

现在我们粗略的分析一下在整个请求过程中,各个Struts组件是如何被组织调用的。从代码中可以看出,整个process方法内部是由若干个processXXX方法组成,每条语句都执行一个特别处理,先是processMultipart,处理与文件上传相关的内容;processPath,根据request中的信息来选择映射路径,以便后来选择合适的ActionMapping组件;processLocale,处理本地化信息;processContent、processNoCache,处理与HTML头相关的信息(contentType和缓存的使用);processPreprocess,该方法为模板方法,如果我们通过继承ActionServlet来定义自己的ActionServlet,可以覆盖此方法以达到预先处理请求内容的目的;processCachedMessages,清理session中的缓存消息;processMapping,通过之前查找到的path来确定可用的ActionMapping对象;processRoles,有点ACL的意思,还真没用过,主要是确认当前用户的角色是否有访问当前的资源。

剩下的内容将在下节进行细节分析。

  • processActionForm // 根据ActionMapping提供的信息生成ActionForm
  • processPopulate // 利用request中携带的请求信息填写ActionForm中定义的每个字段
  • processValidate // 调用ActionForm的validate方法来做数据验证
  • processException // 处理异常,对应struts-config.xml中Exception部分
  • processForward // 处理ForwardAction
  • processInclude // 处理IncludeAction
  • processActionCreate //根据ActionMapping提供的信息生成Action,每个Action只有一个实例存在
  • processActionPerform // 调用Action的execute方法
  • processForwardConfig // 根据Action.execute方法返回的ActionForward来决定接下来的URL切换动作(跳转或转发)
分享到:
评论

相关推荐

    struts2 源码分析

    Struts2 源码分析 Struts2 是一个基于MVC 模式的Web 应用程序框架,它的源码分析可以帮助我们更好地理解框架的内部机制和工作流程。下面是Struts2 源码分析的相关知识点: 1. Struts2 架构图 Struts2 的架构图...

    struts2源代码分析

    在分析Struts2的源代码之前,你需要首先获取Struts2的源代码,可以通过访问http://www.opensymphony.com/xwork/download.action下载XWork的源码,因为它构成了Struts2的核心。下载的源代码压缩包名为struts-2.1.0-...

    struts2源码分析

    struts2源码详细解析51CTO下载-struts2源代码分析(个人觉得非常经典)

    Struts 2.1.8_学习源码

    Struts 2.1.8 学习源码内容 Struts2_01FirstDemo : 跑通第一个Struts2的实例 Struts2_02CURD : 关于Struts2的增、删、改和查 实际业务中数据来自数据库,从DAO层查询,本实例使用静态资源的方式模拟, 主要是关于...

    struts-1.3.9 源码

    通过分析Struts 1.3.9的源码,开发者可以学习到如何设计一个MVC框架,了解其请求处理流程、视图渲染机制以及如何通过配置文件定制行为。此外,这也有助于开发者在遇到问题时能够追溯源代码,找到问题的根源,或者为...

    struts2源码分析总结

    本文将深入探讨Struts2的源码分析,特别是关于StrutsPrepareAndExecuteFilter的初始化过程,这是Struts2的核心组件之一,负责处理HTTP请求。 首先,我们来看`StrutsPrepareAndExecuteFilter`的初始化。这个过滤器...

    struts2.1.8 struts2源码 Eclipse关联这个可以

    在Eclipse中关联Struts2.1.8源码,可以帮助开发者更好地理解和调试代码。步骤包括: - 下载Struts2.1.8的源码包。 - 在Eclipse中,右键点击项目,选择"Build Path" -> "Configure Build Path" -> "Libraries" -> ...

    struts2文件上传下载源代码

    这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件到服务器。在Struts2中,这通常通过表单实现,表单包含一个`<input type="file">`...

    Struts2源码分析

    在深入理解Struts2的工作原理时,源码分析是必不可少的步骤。Struts2的核心设计理念和设计模式相比Struts1.x有了显著的变化,这使得它成为一个独立且成熟的框架。 首先,Struts2的架构基于WebWork的核心,这意味着...

    struts-1.2.9-src源码类库

    在本压缩包"struts-1.2.9-src"中,包含的是Struts 1.2.9版本的源代码,这对于开发者深入理解Struts的工作原理、调试问题或者进行二次开发非常有帮助。 Struts框架的核心组件包括Action、ActionForm、ActionServlet...

    struts2部分源码分析

    本篇文章将深入探讨Struts2的运行原理,通过源码分析来揭示其内部工作机制。 首先,我们从核心组件开始。Struts2的核心组件包括Action、FilterDispatcher、Interceptor和Result。Action是业务逻辑的载体,它接收...

    Struts2框架源码

    在MyEclipse9中,你可以导入这些源码,通过调试和阅读代码,理解Struts2的工作原理。对于初学者来说,这是一条深入理解MVC框架的好途径。你可以逐步分析Action类如何被调用,拦截器如何影响Action的执行流程,以及...

    struts源码

    通过对源码的阅读和分析,开发者能够更好地定制和优化Struts框架,解决特定场景下的问题,提升开发效率和应用性能。同时,了解Struts的源码也有助于理解和学习其他MVC框架,比如Spring MVC,因为它们遵循相似的设计...

    Struts2 S2-029远程代码执行漏洞初探1

    Struts2 S2-029 远程代码执行漏洞初探 Struts2 是一个基于 Java 的 Web 框架,使用 OGNL 表达式来访问 ActionContext 中的对象数据。在 Struts2 中,标签库使用 OGNL 表达式来获取对象数据,例如 `<s:property ...

    struts2.3.4源代码

    尽管描述中提到不包含XWork源代码,但XWork是Struts2的基础,它处理Action的执行和异常管理。 在Struts2.3.4源代码中,我们可以深入理解以下关键知识点: 1. **FilterDispatcher**: 这是Struts2框架的入口点,负责...

    struts2 源码

    深入学习Struts2的源码,有助于理解其运行机制,从而更好地优化代码、调试问题,甚至开发自己的扩展。对于Java Web开发者来说,掌握Struts2的基本原理和使用技巧,能够显著提高开发效率和应用质量。

    Struts2源码阅读

    通过阅读Struts2的源码,我们可以深入了解框架如何处理请求、如何调度Action以及如何应用拦截器来扩展功能。这有助于开发者更好地定制和优化他们的应用程序,提高代码质量和性能。在实际开发中,对源码的理解能帮助...

    struts2 项目源码

    通过分析这个Struts2项目源码,你可以学习以下技能: 1. 如何创建Action类,并定义其方法与用户请求对应。 2. 理解配置文件`struts.xml`的结构和作用。 3. 掌握Action与视图的交互,了解结果类型的应用。 4. 学习...

Global site tag (gtag.js) - Google Analytics