Struts2是一个强大的MVC框架,它简化了Java Web应用的开发。其核心工作流程涉及多个组件协同工作,包括过滤器、ActionMapper、ActionProxy、ActionInvocation、Interceptor以及Dispatcher等。下面将详细解释这些概念及其在工作流程中的作用。 1. **Servlet容器接收HTTP请求并传递给Struts2的过滤器**:当一个HTTP请求到达服务器,Servlet容器(如Tomcat)首先接收到请求。在Web应用的配置中,Struts2通过`StrutsPrepareAndExecuteFilter`过滤器注册,因此容器会将请求交给这个过滤器进行处理。 2. **过滤器查询ActionMapper**:过滤器会查询ActionMapper来确定请求是否对应于一个可执行的Action。ActionMapper是用于映射请求URL到具体Action的一个组件,如果找到匹配的Action,那么就会继续处理。 3. **创建ActionProxy和ActionInvocation**:过滤器通过ActionProxyFactory创建ActionProxy实例,ActionProxy是Action与拦截器栈之间的桥梁。接着,ActionProxy会创建ActionInvocation对象,它是执行Action和调用拦截器的核心。 4. **执行拦截器和Action**:ActionInvocation负责调用一系列预先配置好的拦截器,按照指定的顺序执行。每个拦截器的`intercept()`方法会在Action执行前后被调用,提供了扩展点。当所有拦截器执行完毕,ActionInvocation会调用实际的Action执行业务逻辑。 5. **处理返回结果**:Action执行完成后,Dispatcher会根据`struts.xml`配置文件找出对应的返回结果。返回结果可以是重定向、转发或者渲染一个JSP页面等。 6. **反向执行拦截器**:在返回结果处理完后,Interceptor会按照相反的顺序再次执行,以便于清理资源或执行其他后期操作。过滤器将响应发送回客户端,完成HTTP请求处理。 Struts2内置了许多拦截器,例如: - **AliasInterceptor**:用于在不同请求之间转换参数名称。 - **ActionAutowiringInterceptor**:实现依赖注入,自动装配Action的属性。 - **ChainingInterceptor**:配合chain结果类型,实现Action间的转发。 - **StrutsConversionErrorInterceptor**:处理类型转换错误。 - **CookieInterceptor**:处理Cookie操作。 - **ClearSessionInterceptor**:清除Session。 - **CreateSessionInterceptor**:创建新的Session。 - **DebuggingInterceptor**:提供调试信息展示。 - **ExecuteAndWaitInterceptor**:后台执行Action并显示等待页面。 - **ExceptionMappingInterceptor**:异常处理。 - **FileUploadInterceptor**:支持文件上传。 - **I18nInterceptor**:实现国际化。 - **LoggingInterceptor**:日志记录。 - **ModelDrivenInterceptor**:如果Action实现了ModelDriven接口,将模型数据放入Value Stack。 - **ScopedModelDrivenInterceptor**:处理特定范围内的ModelDriven行为。 - **ParametersInterceptor**:将请求参数绑定到Action。 - **ActionMappingParametersInterceptor**:处理Action元素中的参数。 - **PrepareInterceptor**:如果Action实现了Preparable接口,调用prepare方法。 - **StaticParametersInterceptor**:从配置文件中设置Action参数。 - **ScopeInterceptor**:管理Action的状态存储在session或application中。 - **ServletConfigInterceptor**:提供ServletAPI的Map访问。 - **TimerInterceptor**:记录Action执行时间。 - **TokenInterceptor**:防止表单重复提交。 - **TokenSessionInterceptor**:处理与会话相关的令牌。 理解Struts2的工作流程和拦截器机制对于开发高效的MVC应用至关重要,因为它允许开发者通过拦截器进行定制化处理,增强应用的功能和性能。通过合理的拦截器配置,开发者可以实现诸如日志记录、权限控制、异常处理、国际化等多种功能,而无需修改Action的核心代码。
剩余12页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助