从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程序员查询辞典》
分享到:
相关推荐
在Struts2中,动态方法调用(Dynamic Method Invocation,DMI)是一种特性,允许我们通过URL直接调用Action类的方法,而无需在配置文件中显式指定。这在某些情况下提供了更大的灵活性。 在Struts2的动态方法调用中...
### Struts 源码学习之ActionServlet #### 一、引言 在Java Web开发领域,Struts框架因其简洁的MVC(Model-View-Controller)架构模式而备受开发者青睐。本文旨在深入剖析Struts框架的核心组件之一——`Action...
从 org.apache.struts2.dispatcher.FilterDispatcher 开始 Java 代码阅读,我们可以看到 FilterDispatcher 的 init 方法,它负责初始化 Dispatcher 对象,并创建了一个 ActionMapper 实例,以便对请求进行处理。...
- **动态方法调用(Dynamic Method Invocation, DMI)**: 允许通过URL直接调用Action的方法,提高了灵活性。 - **OGNL(Object-Graph Navigation Language)**: Struts2使用OGNL作为默认表达式语言,用于在Action...
总的来说,这篇“Struts2源码解读”的博文应该是对Struts2核心机制进行了详细的解析,包括Action、Interceptor、Result等关键组件的工作原理,以及整个请求处理流程。通过学习这些内容,开发者可以深化对Struts2的...
2. **ActionInvocation**:执行Action的流程管理器,维护拦截器链的执行过程,并最终调用Action的execute方法。 3. **OGNL表达式**:OGNL是Struts2中用于对象属性访问和表达式计算的语言,它使得在视图层和模型层...
1. `ActionMapper`:默认实现为`DefaultActionMapper`,它将HTTP请求与Action调用进行映射,降低了Action对Servlet API的依赖。通过自定义ActionMapper,你可以自定义URL格式,甚至实现RESTful风格的路由。 2. `...
3. **拦截器(Interceptors)**:拦截器是Struts2的一大特色,它们可以在Action调用前后执行额外的任务,如权限验证、日志记录等。源码中可能包含一些自定义拦截器类,通过`struts.xml`进行配置。 4. **结果类型...
最新版的Struts2源码可以从GitHub的Apache官方仓库获取,这为我们提供了深入理解其内部工作原理和定制功能提供了可能。 Struts2的核心特性包括: 1. **Action与结果**:在Struts2中,业务逻辑处理主要由Action类...
它们是AOP(面向切面编程)的体现,可以在Action调用前后插入自定义的处理逻辑,比如日志记录、权限检查等。 7. **ValueStack**:Struts 2引入了ValueStack,它是Ognl(Object-Graph Navigation Language)表达式...
此外,Struts2支持动态方法调用,即根据请求参数直接调用Action类的方法,增强了灵活性。 3. **结果类型(Result Type)**: 结果类型决定了Action执行后如何返回响应。Struts2内置了多种结果类型,如dispatcher用于...
- `ActionServlet`:Struts框架的入口点,处理HTTP请求并调用Action。 - `struts-config.xml`:配置文件,定义了Action、ActionForm、-forward等信息。 - `ActionForward`:定义了请求转发路径,可以是内部的JSP...
5. **拦截器(Interceptor)**:Struts中的拦截器可以插入到Action调用链中,实现预处理和后处理逻辑,例如日志记录、事务管理等。 6. **国际化和本地化**:Struts支持多语言,源码中可能包含资源文件(如....
`StrutsActionProxy`、`StrutsActionProxyFactory`和`StrutsObjectFactory`是Struts2对XWork的扩展,用于定制和管理Action的实例化过程。 在视图层,Struts2提供了一系列增强的组件,位于`org.apache.struts2....
总结来说,这个"Struts2演示源码"涵盖了Struts2的核心功能,包括Action结果的处理、文件上传、自定义拦截器的创建和应用、输入验证以及OGNL的使用。通过深入研究这些示例,开发者可以更好地理解和掌握Struts2框架,...
3. **拦截器(Interceptors)**:拦截器是Struts2的一大亮点,它们在Action调用前后执行,可以实现如日志、事务管理、权限控制等功能,提高了代码的可复用性。 4. **结果类型(Result Types)**:框架支持多种结果...
Interceptor是Struts2的一个强大特性,它允许在Action调用前后插入自定义逻辑,比如日志记录、权限检查等。Result则负责展示Action执行后的结果,如跳转页面或返回JSON数据。 接下来,我们详细讨论一下...
在手动编写Struts源码的过程中,你将了解到如何创建Action类,如何定义ActionForm,以及如何在struts-config.xml中配置这些元素。这将帮助你理解请求是如何从浏览器到服务器,再到Action,最后到视图的整个流程。...
通过研究"Struts in Action"的源码,开发者能够深入理解Struts框架的内部机制,掌握如何有效地组织MVC组件,以及如何利用框架提供的各种特性来提高开发效率和应用的可维护性。这将有助于你在实际项目中更好地运用...