从Struts源码看action调用过程,以下代码片断来自struts1.1
struts中所有的请求都是通过ActionServlet转发的,一个action请求首先会传给ActionServlet,ActionServlet会将其委托给RequestProcessor,RequestProcessor进行一些处理后将调用对应的Action类来执行该请求。
ActionServlet、RequestProcessor、Action的职责
ActionServlet负责通过Struts配置文件初始化Struts应用程序的配置,并负责接受用户请求。
RequestProcessor负责与请求相关的各方面,如选择与请求相关联的Form Bean、用数据填充Form
Bean、验证Form Bean的有效性及选择正确的Action类来执行该请求。
Action是Struts框架的终点和你的应用程序代码的起点。
以下为Action执行过程的详细分析:
ActionServlet继承自HttpServlet它重写了其doGet、doPost方法,这两个方法执行时都会调用ActionServlet的process(HttpServletRequest request, HttpServletResponse response)方法,这里将会获取一个RequestProcessor的实例,并调用RequestProcessor的process(HttpServletRequest request, HttpServletResponse response)方法,这样用户请求就转到了RequestProcessor
以下为RequestProcessor类的process(HttpServletRequest request, HttpServletResponse response)方法的片断
// Create or acquire the Action instance to process this request
Action action = processActionCreate(request, response, mapping);
if (action == null) {
return;
}
// Call the Action instance itself
ActionForward forward =
processActionPerform(request, response,
action, form, mapping);
// Process the returned ActionForward instance
processForwardConfig(request, response, forward);
这里用户请求的Action被实例化后传给processActionPerform(request, response,action, form, mapping)方法,此方法将调用Action的execute(HttpServletRequest request,
HttpServletResponse response,
ActionForm form,
ActionMapping mapping)方法并返回一个ActionForward,
processForwardConfig(request, response, forward)方法将用户界面转到ActionForward指定的url。
至此用户请求的action就执行完毕了。
你可能要问ActionServlet是如何被启动的呢?因为它是一个HttpServlet,其执行是由Servlet容器来控制的,在后面的tomcat源码分析中会讲到Servlet是如何被执行的!
参考书:《struts程序员查询辞典》
分享到:
相关推荐
使用Struts的Action来对数据库进行增、删、改、查四项操作 <br/>1、数据库MySQL,创建数据库 Pagination MySQL.sql用来创建表结构 <br/>连接方式有两种,一种直接JDBC,一种通过连接池,代码中有说明...
Struts2源码分析 请求首先通过Filter chain,Filter 主要包括ActionContextCleanUp,它主要清理当前线 程的ActionContext 和Dispatcher;FilterDispatcher 主要通过AcionMapper 来决定需要调用哪 个Action。
Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器 三、定义Struts2拦截器。 ...
* 从ServletContext容器根目录拿去相关资源文件,它被result(type="stream")stream指定类调用,因此在 * result中要指定关联关系<param name="inputName">inputStream * */ System.out.println(...
Struts2.3的完整包.包括所有包的源码!
作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...
一、准备工作及实例 3 1.解压struts-2.1.6-all.zip 3 2.六个基本包 3 3.初识struts2配置文件 4 ... 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图来看: 60
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。 流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的...
a)客户端初始化一个指向Servlet容器...d)请求经过核心过滤器FilterDispatcher,执行doFilter方法,在该方法中,询问ActionMapper来决定这个请求是否需要调用某个Action;e)如果ActionMapper决定需要调用某个Action,则
一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...
一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...
一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...
import org.apache.struts.action.ActionForward; /** * * @author yangjuqi 2007-06-13 * @struts.action name="biddingForm" path="/carriageBidQuery" validate="false" * @struts.action-forward name=...
action:存放struts2控制类的包 dao:数据库访问封装 enm:系统中使用到的常量包,这里不是用的常量,用的是枚举替代常量 entity:hibernate对应的orm与数据库表一一对应的实体类 filter:Log4jFormatFilter(格式化...
• Before passing it to the Action class, Struts will also conduct form state validation by calling the validation() method on UserActionForm. Note: This is not always wise to do. There might be ways ...
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...
4个xml文件(applicationContext-dao.xml(dao注入配置),applicationContext-service.xml(service注入配置),action-servlet.xml(action注入配置),struts-{自定义的存放包名}.xml(struts2的action配置文件)) ...
框架将各个零散的框架(struts,strust2,springmvc,hibernate,ibatis,spring_jdbc,flex)搭建好,并内置一个代码生成器,辅助项目开发,可以生成java的hibernat model,dao,manager,struts+struts2 action类,可以生成jsp...
支持跳转到jsp和跳转到Action(struts架构)两种类型,支持单选或者多选列,支持传Vector 或者sql语句,支持数据库后端分页.... 具体参见源码包中“使用说明.txt”,里面有详细的设置步骤,使用示例源码