在web.xml中配置有
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
当页面请求到来时, ActionServlet进行初始化, 执行该Servlet的init()方法,
initModuleMessageResources(moduleConfig);
initModulePlugIns(moduleConfig);
initModuleFormBeans(moduleConfig);
initModuleForwards(moduleConfig);
initModuleExceptionConfigs(moduleConfig);
initModuleActions(moduleConfig);
完成初始化操作。
之后, 调用该Servlet的doGet 、doPost方法,
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
process(request, response);
}
.....
继续方法调用
processor.process(request, response);
其中获取processor方法为:
/**
* <p>Returns the RequestProcessor for the given module or null if one
* does not exist. This method will not create a RequestProcessor.</p>
*
* @param config The ModuleConfig.
* @return The <code>RequestProcessor</code> for the given module, or
* <code>null</code> if one does not exist.
*/
private RequestProcessor getProcessorForModule(ModuleConfig config) {
String key = Globals.REQUEST_PROCESSOR_KEY + config.getPrefix();
return (RequestProcessor) getServletContext().getAttribute(key);
}
下面简要分析一下上面提及的processor.process(request, response)
public void process(HttpServletRequest request, HttpServletResponse response) {
// 处理文件上传
request = processMultipart(request);
// 得到ActionMapping
ActionMapping mapping = processMapping(request, response, path);
// 得到ActionForm
ActionForm form = processActionForm(request, response, mapping);
// 得到action
Action action = processActionCreate(request, response, mapping);
// 得到forward
ActionForward forward =
processActionPerform(request, response, action, form, mapping);
....
processForwardConfig(request, response, forward);
}
processForwardConfig(request, response, forward) 又会调用RequestDispatcher的forward等方法, 完成
此次转发。
关于action的获取方法 processActionCreate
protected Action processActionCreate(HttpServletRequest request,
HttpServletResponse response, ActionMapping mapping)
throws IOException {
// Acquire the Action instance we will be using (if there is one)
String className = mapping.getType();
if (log.isDebugEnabled()) {
log.debug(" Looking for Action instance for class " + className);
}
// If there were a mapping property indicating whether
// an Action were a singleton or not ([true]),
// could we just instantiate and return a new instance here?
Action instance;
synchronized (actions) {
// Return any existing Action instance of this class
instance = (Action) actions.get(className);
可见action是单例的
分享到:
相关推荐
底层,详细. Struts运行流程图(详细) Struts运行流程图(详细) Struts运行流程图(详细)
传统的Web页面流程图:例如Struts的Action和视图,从struts-config.xml文件的Action定义中不能清晰的看到页面流程(基于cocoon的…) Spring MVC提供了一个轻便的高层次的功能:表单控制器实现了一个与定义的页面流程。...
1. **动作标签(Action Tags)** - `<s:action>`:这个标签用于执行一个Struts2的动作,可以传递参数并显示结果页面。 - `<s:url>`:创建一个URL,可以包含动作、参数等,常用于链接的生成。 2. **数据展示标签...
《Spring Web Flow 入门详解》 随着Web应用的不断扩展和复杂化,管理页面流程逐渐成为了一项挑战。在大型应用中,如何清晰地定义和控制应用的导航逻辑,尤其是涉及多步骤交互过程时,成为了开发者的关注焦点。...
1. 流程(Flow):定义了用户交互的行为序列,表现为动作状态和显示状态的树形结构。 2. 动作状态(Action States):执行特定的动作。 3. 动作(Actions):执行业务逻辑。 4. 显示状态(View States):展示用户...
1. **Action Tags**: 这些标签用于执行一个Action,例如`<s:action>`,并可以设置额外的属性,如executeResult和event,来控制Action的执行流程。 2. **Display Tags**: 包括`<s:property>`、`<s:label>`等,用于...
3. **技术无关性**:无论你使用 Struts、Spring MVC、Tapestry、JSP 还是 Portlets,都可以轻松集成 Spring Web Flow 来管理页面流程。 4. **流程管理**:Spring Web Flow 自动管理流程的生命周期,包括事件触发、...
2. **配置 Struts2 Action**:创建一个 Action 类,例如 `panyu.flow.web.action.ExcelAction`,这个类将处理导出 Excel 的逻辑。在 Struts2 的配置文件 `struts.xml` 中,定义一个名为 "exportExcel" 的 action,...
下面我们将从Struts1.x与Struts2.0标签库的对比入手,再深入探讨Struts2中的非UI标签。 ##### 2.1 Struts1.x与Struts2.0 标签库对比 - **分类**:Struts1.x的标签库按照功能划分为HTML、Tiles、Logic和Bean等几个...
The "struts-logic" tag library contains tags that are useful in managing conditional generation of output text, looping over object collections for repetitive generation of output text, and ...
Spring Web Flow 1.x 是个自成体系的框架,可与 Spring Web MVC 、 Struts 、 JSF 等 Web 框架整合。最新的 Spring Web Flow 2.0 则明确声明是基于 Spring Web MVC 的一个扩展。 • 提供了处理 Ajax 事件的能力 Ajax...
Spring Web Flow (SWF) 是一个专门为管理Web应用程序复杂页面流程设计的框架,它是Spring Framework的一个独立模块,常用于Spring Web应用开发,其中包括Spring MVC。SWF的主要目标是提供一种优雅的方式来处理多步骤...
1. **Struts的基本概念** - Struts是一个用于构建Web应用程序的框架,它强调了业务逻辑和表示层的分离,使得开发者可以更加专注于各自领域的编码。 - Struts遵循MVC设计模式,其中Model代表业务逻辑,View负责展示...
Spring Web Flow 1.x 版本虽然能够与其他 Web 框架(如 Struts、JSF)进行整合,但在 2.0 版本中,它被明确设计为 Spring MVC 的一个扩展。这意味着开发者可以更容易地在现有的 Spring MVC 应用程序中集成 Spring ...
1. **Struts2**:Struts2 是 Apache 软件基金会下的一个项目,它继承了 Struts1 的优点并解决了其不足。Struts2 提供了一个灵活的 MVC 模式,支持拦截器、模板技术和多种结果类型,使得开发更高效、可测试性更强。它...
在 `panyu.flow.web.action.ExcelAction` 类中,你需要定义一个字段 `excelStream` 用于存储生成的 Excel 文件的字节流。Action 中的方法会负责填充 Excel 数据,然后将其转换成字节流。这里可能涉及到一些业务逻辑...
Maven框架项目该项目不再更新维护,请移步该项目基于maven3.0构建的,项目中融合了Struts1 , Struts2 , Spring , SpringMVC , Hibernate , Ibatis , MyBatis , Spring Data JPA , Spring JDBC , Spring DWR...
1. **配置环境**:首先,需要在项目中引入这三个框架的库,并配置相关的XML文件,如struts-config.xml、hibernate.cfg.xml和applicationContext.xml,这些配置文件定义了框架间的交互规则。 2. **整合Struts与...
Spring框架是Java企业级应用的全功能容器,它不仅提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,还包含了众多模块,如Spring MVC、Spring JDBC、Spring ORM(包括对Hibernate的支持)、Spring Web Flow等。...