通过Java动态代理一文,我们了解了动态代理的好处,也知道了Struts2的拦截器也是利用Java动态代理实现的。那么什么是拦截器呢?
拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。拦截器(Interceptor)是Struts 2的核心组成部分。很多功能(Feature)都是构建在拦截器基础之上的,例如文件的上传和下载、国际化、转换器和数据校验等,Struts 2利用内建的拦截器,完成了框架内的大部分操作。
Struts2的拦截器和Servlet过滤器类似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法。要实一个拦截器,你必须继承com.opensymphony.xwork2.interceptor.Interceptor接口,并实现Intercepter接口的以下三个方法:
void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception;
拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
destroy和init不用多说,intercept方法是拦截器的核心方法,所有安装的拦截器都会调用这个方法。Struts 2已经为提供丰富多样的,功能齐全的拦截器实现。可以到struts2-all-2.0.1.jar或struts2-core-2.0.1.jar包的struts-default.xml查看关于默认的拦截器与拦截器链的配置。
timer是Struts2中最简单的拦截器,这个拦截器对应的类是com.opensymphony.xwork2.interceptor.TimerInterceptor。它的功能是记录execute方法和其他拦截器(在timer后面定义的拦截器)的intercept方法执行的时间总和。
在使用timer拦截器时,需要commons-logging.jar的支持。将logger引用放到timer的后面,就可以记录logger拦截器的intercept方法和Action的execute方法的执行时间总和,代码如下:
使用以下Action类来测试timer拦截器。
package action; import com.opensymphony.xwork2.ActionSupport; public class FirstAction extends ActionSupport { public String execute() throws Exception { Thread.sleep(1000); // 延迟1秒 return null; } }
当客户端的一个form向服务端提交请求时,如有一个textfield,代码如下:
提交后,Struts2将会自动调用first动作类中的setName方法,并将name文本框中的值通过setName方法的参数传入。实际上,这个操作是由params拦截器完成的,params对应的类是com.opensymphony.xwork2.interceptor.ParametersInterceptor。由于params已经在defaultStack中定义,因此,在未引用拦截器的中是会自动引用params的,如下面的配置代码,在访问first动作时,Struts2会自动执行相应的setter方法。
… … 如果在中引用了其他的拦截器,就必须再次引用params拦截器,Struts2才能调用相应的setter方法。如下面的配置代码所示:
static-params拦截器可以通过配置标签来调用Action类的相应的setter方法,static-params拦截器对应的类是com.opensymphony.xwork2.interceptor.StaticParametersInterceptor。
比尔 如果first动作使用上面的配置,在访问first动作时,Struts2会自动调用setWho方法将“比尔”作为参数值传入setWho方法。
为了能在多个动作中方便地引用同一个或几个拦截器,可以使用拦截器栈将这些拦截器作为一个整体来引用。拦截器栈要在标签中使用和子标签来定义。代码如下:
struts-default" > 比尔
分享到:
相关推荐
1. **Struts2的体系结构**:Struts2框架的核心组件包括过滤器(Filter)、拦截器(Interceptor)、配置文件(如struts.xml)以及Action等。其中过滤器是入口点,拦截器用于控制Action的执行流程。 2. **Struts2配置...
Struts2基于拦截器模式,使得它在处理请求和响应时更加灵活,支持多种视图技术如JSP、FreeMarker、Velocity等。 ### 2. MVC模式与Struts2 MVC模式是软件设计中的经典模式,Struts2完全遵循这一模式。模型负责业务...
Struts2提供了一系列默认的拦截器,并允许用户自定义拦截器。 **3.3 ActionMapper** `ActionMapper`负责将HTTP请求映射到对应的Action上。大部分情况下,`ActionMapper`并不需要显式配置,它会自动根据请求路径...
8. **Interceptor(拦截器)**: Struts2的拦截器机制允许在Action执行前后插入自定义的逻辑,如权限验证、日志记录等。时序图会展示多个拦截器的执行顺序。 9. **Dispatcher Servlet**: 最后,Dispatcher Servlet将...
一、准备工作及实例 3 1.解压struts-2.1.6-all.zip 3 2.六个基本包 3 3.初识struts2配置文件 4 ... 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图来看: 60
学习Struts2不仅需要理解这些核心库的功能,还需要了解如何配置Action、拦截器、结果类型,以及如何利用OGNL进行数据绑定,同时掌握FreeMarker模板的编写和文件上传的处理。通过实践,开发者可以逐步熟练掌握Struts2...
Struts2的核心配置文件主要负责定义应用的行为逻辑,包括但不限于Action的映射、拦截器的配置以及结果类型的定义等。例如,在示例代码中可以看到`<struts>`标签下的内容: ```xml <struts> <!-- 配置项 --> </...
1. struts2-core-2.3.4.1.jar:这是Struts2的核心库,包含了框架的基础功能,如Action类、Result类型、拦截器、配置管理等。它是所有Struts2应用的基础,没有它,其他组件无法正常工作。 2. xwork-core-2.3.4.1.jar...
默认情况下,这个拦截器并不启用,只有当开发者显式配置某个Action使用它时,漏洞才会被暴露。攻击者需要知道哪个Action启用了这个配置,这增加了发现漏洞的难度。示例配置如下: ```xml * * ...
5. `org.apache.struts2.interceptor`:定义了内置的拦截器,这些拦截器可以在请求处理前或后执行特定任务,如认证、授权、日志记录等。 6. `org.apache.struts2.util`:提供了一些实用工具类。 7. `org.apache....
- **拦截器**:拦截器是Struts 2的重要组成部分,它们可以在请求到达Action之前或之后执行特定的任务,如验证、转换、记录等。 - **FilterDispatcher和Action**:FilterDispatcher是Struts 2的前端控制器,它负责...
2. **配置Struts2**:添加Struts2的库依赖,编写struts.xml配置文件,设置全局结果类型、拦截器栈等。定义Action类,并使用Spring插件进行注入。 3. **配置JPA**:添加JPA和持久化提供者(如Hibernate)的依赖,...
Struts2是Apache组织下的一个开源Web应用框架,它继承了Struts1的优良特性,并在此基础上进行了大量改进,引入了拦截器、类型转换、文件上传/下载等众多实用功能,使得开发更为高效便捷。接下来,我们将详细解析...
3. **拦截器**:拦截器是Struts2的一个重要特点,它们按照预定义的顺序在Action执行前后执行,可以用来实现如日志记录、权限检查、事务管理等功能。开发者可以根据需求自定义拦截器。 4. **结果类型**:Struts2支持...
3. **拦截器(Interceptor)**:Struts2的拦截器机制允许在Action调用前后执行额外的逻辑。对于登录,可能会使用验证拦截器检查用户输入是否有效,或者安全拦截器确保用户已登录才能访问特定资源。 4. **结果类型...
Struts2的核心设计采用了拦截器(Interceptor)模式,这使得它可以轻松地扩展和定制,同时也具备了更好的性能。 ##### 2.2 Struts2的体系结构 Struts2的体系结构以拦截器为核心,用户的业务逻辑控制器为目标。当...
目录通常会包含每个章节的标题,比如"Struts2核心概念"、"拦截器原理"、"结果类型与视图解析"等,这对于理解和探索源代码至关重要。 2. **光盘说明.txt**:这份文档可能包含了获取和使用这些源代码的指南,包括任何...
- **使用拦截器**:详细介绍Struts2中预定义的拦截器及其应用场景。 - **自定义拦截器**:讲解如何根据需求编写自定义拦截器以增强应用的功能。 - **综合示例**:提供一个包含多种拦截器的实际应用案例。 #### 七、...
2. **Interceptor(拦截器)**: 拦截器是Struts 2中一个强大的特性,它允许在Action执行前后插入自定义逻辑。例如,`ParamsInterceptor`用于处理请求参数,`ValidationInterceptor`进行字段验证。在`src`目录下的`...