拦截器的工作流程:
下面的就是当一个请求到struts2的时候,框架所做的事情:
框架首先寻找去调用哪一个Action class去处理request,并且会通过action配置去寻找要执行的过滤器。
现在过框架会生成一个ActionInvocation的实例并且会去执行invoke()方法。此时此刻,框架会将控制权转交给ActionInvocation以进行将来的处理。
ActionInvocation会将action和interceptors进行封装,并且知道拦截器将以怎样的次序被调用。
ActionInvocation会调用拦截器栈中的第一个拦截器的interceptor方法,下面就是LoggingInterceptor’s的interceptor()方法,它包含有以下的内容:
public String intercept(ActionInvocation invocation) throws Exception
{
//Pre processing
logMessage(invocation, START_MESSAGE);
String result = invocation.invoke();
//Post processing
logMessage(invocation, FINISH_MESSAGE);
return result;
}
正如所代码所展示的,当logMessage()方法被调用后,ActionInvocation会调用下一个拦截器的interceptor()方法,就这样循环重复着,直到栈中最后一个拦截器被调用。
当所有的拦截器都被调用之后,就会去调用action类中的指定的处理函数(默认为execute()方法),执行完后会返回一个结果对应的视图信息。
但是如果任何一个验证器检验出有错误发生,在这种情况下,请求就会被终止。以后的过滤器都不会被调用,并且action也不会被执行。同时控制流就会发生改变:到现在为止,已经执行的过滤器就会以相反的顺序传递处理结果,然后返回给用户。
现在我们考虑一下当执行完action后的操作,同样看LoggingMessage中的intercept方法,当执行完invoke方法后,就会继续执行下面的一个logMessage(invocation, FINISH_MESSAGE);然后将结果返回给前一个执行的过滤器,依次循环,所有的过滤器都完成,然后将结果返回给用户。
通过框架的过滤器机制,我们可以进行如下的操作和好处:
1、 更加灵活的操作用户的请求
2、 可以专心的处理用户的请求(即专注于Action中的处理请求函数,及其后台操作)
3、 加强了核心代码的可读性以及可重用性
4、 更加方便的进行项目测试
5、 我们可以只增加自己需要的过滤器到过滤器栈中去处理用户的请求
分享到:
相关推荐
Struts 2是Java Web开发中的一个开源框架,它的核心机制之一就是拦截器(Interceptor)。拦截器在MVC模式中扮演着重要的角色,允许开发者在请求处理前后插入自定义的逻辑,增强了系统的可扩展性和灵活性。 ### 拦截...
总结起来,这个"Struts拦截器案例——登陆"涵盖了Struts2拦截器的基本使用、登录验证、数据库操作以及异常处理等多个方面。通过学习这个案例,开发者可以更好地理解和掌握Struts2框架中的拦截器机制,从而在实际项目...
拦截器是Struts2的核心组件之一,它基于AOP(面向切面编程)的概念,为框架提供了高度的灵活性和可扩展性。以下是关于Struts2拦截器的基础知识的详细说明: 1. **拦截器的定义与作用**: - 拦截器是Struts2框架中...
拦截器(Interceptor)是Struts2的另一个重要组成部分,它允许在Action执行前后插入自定义逻辑,如日志记录、权限验证等。 三、MVC模式 在Struts2中,Model代表业务逻辑,View负责展示数据,Controller则协调Model...
拦截器是Struts2的一个强大特性,它们在Action调用前后执行,可以处理诸如验证、日志、事务管理等通用任务。通过灵活配置,开发者可以构建出满足各种需求的业务流程。在深入解析Struts2的章节中,你可能会了解到如何...
2. **创建拦截器**:在saif-0.1.jar中,开发者可能已经定义了一些继承自`org.apache.struts.interceptor.Interceptor`接口的类。这些类实现了拦截器的逻辑,如`doIntercept()`方法。 3. **配置拦截器**:在struts-...
要深入学习和掌握Struts2,建议阅读官方文档,参与实际项目实践,也可以参考相关的技术书籍和教程,例如《Struts2技术内幕——深入解析Struts2架构设计与实现原理》等资源,来提升对Struts2框架的全面理解。
在Struts2中,拦截器工作在Action和结果(Result)之间,形成一个拦截器栈,每个拦截器按照配置的顺序依次执行。 Struts2的拦截器执行流程如下: 1. **初始化拦截器栈**:当Struts2框架启动时,会根据配置文件...
在实际项目中,Struts2可以处理类型转换、文件上传下载、拦截器(Interceptor)防止重复提交等问题。Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入...
Struts2的Interceptor(拦截器)也可能被用来添加额外的逻辑,如日志记录、权限验证等。 在视图层,Struts2默认使用JSP作为模板语言,将Action返回的数据展示给用户。开发者可能会使用Tiles插件来组织复杂的页面...
在实际开发中,Struts2提供了丰富的特性,如拦截器、结果类型、动态方法调用等,这使得它成为处理复杂业务逻辑和表单验证的强大工具。但与此同时,正确配置和管理依赖关系至关重要,否则可能会遇到各种运行时问题。...
07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 Struts 2的新表单标志的使用 13 Struts 2与AJAX
在这个"struts2实现的简单登陆 附加拦截器防止重复提交"的项目中,我们将深入探讨Struts2如何处理用户登录以及如何通过拦截器来防止重复提交的问题。 首先,我们来理解一下Struts2的核心概念。Struts2框架基于...
07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新表单标志的使用 13 Struts 2与AJAX
5. **Struts2拦截器**:介绍Struts2的核心组件之一——拦截器,如何使用拦截器进行日志记录、权限验证等操作。 6. **结果类型与导航**:讲解如何配置结果类型,如Redirect、RedirectAction、Stream等,以及基于...
这个"struts2.2.1.1帮助文档——英文"是开发者的重要参考资料,它提供了关于Struts2框架核心组件、配置、拦截器、插件以及API的详细信息。以下是基于该文档和Struts2.2.1.1版本的一些关键知识点: 1. **MVC设计模式...