struts1的核心控制器是ActionServlet
* 当tomcat启动的时候加载web.xml.在web.xml里面配置Servlet节点.然后就会初始化Servlet.因为在 Servlet里面配置了Servlet-class.它映射的是org.apache.struts.action.ActionServlet.这个 ActionServlet继承了HttpServlet.所以它也据有了Servlet的生命周期.根据Servlet的生命周期开始调用init() 方法.
* 在init()方法里面首先调用的是initInternal().这个方法初始化的是struts里面的一些资源文件.如错误提示信息.异常信息.
* 然后调用initOther()方法.这个方法初始化的是web.xml里面除了config开头之外的配置.在这个方法里面它获取的 config和debug参数.初始化ConverUtils对象.初始化这个对象的原因是:从form表单得到的数据全部是String类型的.它会根据需求转换成相对应的类型.
* 然后调用initServlet()方法:这个方法是初始化的精华.里面运用了digester框架.digester对象与sax的作用一样.只不过它的速度比sax要快.都是把web.xml转换成java对象.是sax的高级版.然后加载Servlet-mapping.加载 Servlet-name.加载url-pattern这三个属性.
* (initChain)初始化Struts1里面的Chain框架strut1 chain。初始化chain是组织执行一些复杂的处理流程。
如果某个环节失败了,那这条链就会中断。还有chain还可以在链中插入方块(节点)。小方块由command表示。
ActionCommandBase是小方块的父类。
对外扩展是开放的,对内修改是封闭的,这就是所谓的开关原则。
struts-config.xml初始化
通过字符串加载,依赖性就少一点。
1,在initModuleConfig里开始解析struts-config.xml。把struts-config.xml通过digester转换成moduleconfig对象。
链的每一个节点。
2,初始化struts的资源文件,解析后的资源文件放在getServletContext()里
3,初始化struts的插件。
4,初始化formBean,拿到配置的formbean,处理formbean扩展,判断是否设定formbean的类型。
然后检查是不是动态formbean。
5,初始化forward,检查它的扩展,判断是否设定path。
6,初始化异常。
7,初始化action,拿到配置的action,处理action扩展。然后看action里的forward。
8,初始化冻结,moduleConfig.freeze();(冻结方法)冻结当前的模块的配置。因为初始化只执行一次。
9,拿初始化参数,它会判断还有没有其他的struts-config.xml文件,如果有,就把当前struts-config.xml
进行一次初始化操作。然后销毁掉这个对象。
Struts处理请求
.do发生的请求被actionServlet拦截下来,如果是get请求,就调用doGet方法,如果是post请求,
就调用doPost方法。doGet和doPost都会调用process方法,统一处理。
struts是怎么处理.do请求
.do请求是通过职责链模式实现的
struts真正的处理请求不是ActionServlet,而是链。
通过传入用户请求,生成一个上下文的context。(减少耦合度)不过这只针对当前请求。
分享到:
相关推荐
ActionServlet是Struts1的核心组件,它的生命周期分为初始化、拦截请求和销毁三个阶段。在初始化阶段,`init()`方法执行了一系列关键步骤: 1. `initInternal()`方法初始化内部资源,如国际化设置。它包含了英文和...
`Dispatcher`类在Struts2中扮演着重要角色,它负责框架的初始化和Action的执行。`FilterDispatcher`则是一个Servlet Filter,根据配置文件来决定哪些请求需要经过Struts2处理。如果配置不当,可能会导致问题,如将...
在`PropertyTag`中,`doStartTag()`方法会初始化一些属性,如属性路径、转换器等,而`doEndTag()`方法则负责根据属性路径查找值,并将其输出到页面。这个过程中,OGNL表达式起到了关键作用,它能解析复杂的属性路径...
### Struts2源码解析及工作原理 #### Struts2简介 Struts2是一个流行的Java Web应用程序框架,它继承和发展了Struts1.x的一些特性,同时又采用了WebWork框架的核心技术,使得Struts2在设计理念和技术实现上都有了...
在`Dispatcher`的初始化过程中,它会读取`web.xml`或其他配置文件,解析Struts2的配置信息,如Action、结果类型、拦截器等。这些配置信息被加载到内存中的容器中,供后续请求处理时使用。`Dispatcher`还负责初始化...
在初始化过程中,`configDigester`使用SAX解析技术解析这些配置文件,生成ModuleConfig对象。每个ModuleConfig对象封装了一个模块的配置信息,包括Action映射、数据源、消息资源等。配置文件中的`...
在Struts框架中,`init()`方法用于初始化ActionServlet,它会调用`initInternal()`以及其他必要的初始化操作,比如加载配置、注册事件监听器等。 5. **struts流程图方法图.vsd**: 这个文件可能是一个详细的流程图,...
前者定义了Action、Form Bean、数据源、PlugIn等,后者则设置Struts的初始化参数。 5. **数据库连接**:描述中提到了`sql2005`,这表明可能涉及到SQL Server 2005数据库的连接。你需要配置数据源,如在`web.xml`中...
北大青鸟的这份文档是为了帮助学习者入门和精通Struts所编写的,包含了对Struts源码的详细解析。 首先,了解Struts的核心控制器ActionServlet是必要的。ActionServlet继承自javax.servlet.http.HttpServlet类,负责...
从 org.apache.struts2.dispatcher.FilterDispatcher 开始 Java 代码阅读,我们可以看到 FilterDispatcher 的 init 方法,它负责初始化 Dispatcher 对象,并创建了一个 ActionMapper 实例,以便对请求进行处理。...
8. **PlugIn**:允许开发者插入自定义的初始化和销毁代码,以扩展Struts1的功能。 9. **Interceptor**:拦截器是Struts1中实现AOP(面向切面编程)的重要机制,可以定义在请求处理之前和之后执行的逻辑,例如日志...
`ActionProxy`创建并初始化`ActionInvocation`对象,`ActionInvocation`则负责执行Action,并管理拦截器(Interceptors)的调用。 在请求流程中,`ActionInvocation`会按照预定义的顺序调用拦截器,然后执行Action...
8. **PlugIn**: PlugIn是Struts框架中用于扩展的接口,它允许在应用启动时执行自定义的初始化任务,以及在应用关闭时执行清理任务。 9. **ActionServletConfig**: 提供对struts-config.xml配置文件的访问,使得...
- **过滤器**:请求到达时,首先通过StrutsPrepareAndExecuteFilter进行预处理,如初始化ActionForm。 - **ActionServlet**:接收到请求后,根据URL映射找到对应的ActionMapping。 - **ActionForm**:Action...
Interceptor链是由用户自定义的拦截器和Struts2内置的拦截器组成,例如PrepareInterceptor会确保Action实例被正确初始化。Action执行完成后,Result对象会根据配置的类型和值来决定如何处理返回的结果。 此外,...
- 插件可以监听ActionServlet的生命周期事件,比如在初始化阶段进行配置加载,在销毁阶段进行资源释放。 4. **配置文件** - `struts-config.xml`:这是Struts的核心配置文件,定义了Action、ActionForm、...
然而,有一个常见的问题出现在尝试初始化`java.util.Date`类型的字段时,即“Struts的form不能初始化java.util.Date类型”。这个问题通常是由于日期对象的序列化和反序列化机制导致的,以及Struts默认的数据绑定策略...
5. **RequestProcessor**:处理HTTP请求的预处理和后处理,它会初始化ActionServlet并进行一些基本的请求检查。 6. **ActionForward**:表示请求转发的实体,定义了Action执行后的页面跳转路径。 7. **.struts-...
- **web.xml**:这是Servlet容器的部署描述符,其中包含了Struts的初始化参数,如ActionServlet的配置等。 **核心组件**: - **ActionServlet**:这是Struts框架的入口点,继承自Servlet,负责解析请求,执行Action...