`

初步理解和使用Struts2拦截器的原理与实现

阅读更多
一、理解Struts2拦截器

1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.

2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。

二、实现Struts2拦截器原理

Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的    拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器

三、定义Struts2拦截器。


Struts2规定用户自定义拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。该接口声明了3个方法,
void init();
void destroy();
String intercept(ActionInvocation invocation) throws Exception;

其中,init和destroy方法会在程序开始和结束时各执行一遍,不管使用了该拦截器与否,只要在struts.xml中声明了该Struts2拦截器就会被执行。
intercept方法就是拦截的主体了,每次拦截器生效时都会执行其中的逻辑。

不过一般在自定义拦截器的时候,可以使用struts中提供的AbstractInterceptor抽象类来简化这一步骤。
public abstract class AbstractInterceptor implements Interceptor;
public abstract class MethodFilterInterceptor extends AbstractInterceptor;

都是模板方法实现的。

其中AbstractInterceptor提供了init()和destroy()的空实现,使用时只需要覆盖intercept()

@SuppressWarnings("serial")
public class MyFirstInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		String view = "";
		System.out.println("站住,大姐,大大劫!!");
		//getProxy()方法,可以获取action的配置信息,和调用的方法
		System.out.println(arg0.getProxy().getAction());
		view = arg0.invoke();
		System.out.println("欢迎回来");
		return view;
	}

方法;
而MethodFilterInterceptor则提供了includeMethods和excludeMethods两个属性,用来过滤执行该过滤器的action的方法。可以通过param来加入或者排除需要过滤的方法。

四、配置Struts2拦截器

Struts2拦截器需要在struts.xml中声明,如下struts.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
	<package name="myTest" extends="struts-default" namespace="/first">
		<interceptors>
			<interceptor name="firstInterceptor" class="org.tarena.struts.interceptor.MyFirstInterceptor"/>
			<interceptor-stack name="MyInterceptorStack">
				<interceptor-ref name="firstInterceptor"/>
			</interceptor-stack>	
		</interceptors>
	
		<action name="login" class="org.tarena.struts.test01.LoginAction">
			<interceptor-ref name="MyInterceptorStack"></interceptor-ref>
			<result name="success" type="dispatcher">/ok.jsp</result>
			<result name="input">/index.jsp</result>
		</action>
	</package>
</struts>

<interceptor-ref name="MyInterceptorStack"></interceptor-ref>的name可以是一个单独的拦截器,不过一般我们都要对某一类处理做多次同样的拦截是可以一个一个的写,不过,为了方便,我们也可以定义自己的拦截器栈,在栈内可以interceptor-ref 来指向它的拦截器实体,当某个action请求需要这些的拦截器时,我们就可以直接使用我们自己定义的拦截器栈,
而栈内可以放置1到多个的拦截器对其过滤。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Struts2的视频学习代码

    9. **Struts2与Spring集成**:Struts2可以方便地与Spring框架集成,实现依赖注入,便于管理Action对象及其依赖。 10. **异常处理**:Struts2提供了全局的异常处理机制,通过`&lt;global-exception-mappings&gt;`标签定义...

    基于Struts2框架的信息发布系统的设计与初步实现.docx

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,...在设计和实现基于Struts2的信息发布系统时,理解其工作原理和配置方法至关重要,这将直接影响到系统的性能和维护性。

    struts2笔记_初步修改版_.

    通过阅读“Struts2笔记_初步修改版_”文档,开发者能够深入理解Struts2的工作原理,掌握其核心概念和实践技巧,从而更有效地利用该框架进行Java Web开发。这份笔记将是一个宝贵的参考资料,为学习和提升Struts2技能...

    Servlet简单模拟Struts2

    4. **日志拦截**:类似于Struts2的拦截器,我们可以创建一个Servlet Filter或者使用AOP(面向切面编程)来实现日志拦截。在处理请求前,记录请求信息;处理完成后,记录响应信息。这可以帮助我们跟踪应用的行为,对...

    struts2的例子

    7. **初步上手**:了解如何搭建Struts2的开发环境,创建第一个简单的Hello World程序,理解MVC架构的基本原理,以及Struts2的核心概念,如Action、Result、DispatcherServlet等,这是初学者入门的必经之路。...

    struts2权威指南 1-3

    - 拦截器原理:解释拦截器的工作机制,如何在请求处理流程中插入额外的功能。 - 自定义拦截器:编写自己的拦截器类,实现特定的业务需求,如日志记录、权限验证等。 - 拦截器栈:配置拦截器栈,定义拦截器的执行...

    struts2完整的Hello Word例子。

    在本示例中,"struts2完整的Hello Word例子"是帮助开发者理解并熟悉Struts2基本工作原理和配置的一个入门级教程。下面将详细介绍这个Hello World应用的关键知识点。 1. **Struts2框架概述**: Struts2作为继Struts...

    struts2入门(一)

    此外,了解并学习Struts2与其他框架(如Hibernate、Spring)的集成,可以使你的Web应用更具健壮性和可维护性。 九、总结 Struts2是一个强大且成熟的Java Web框架,通过本文的介绍,你应该对Struts2有了初步的认识。...

    Struts2 In Action

    通过理解和掌握Action的工作原理及其相关配置,开发者可以更好地设计和实现Web应用程序的业务逻辑层。 #### 部分内容概览 - **第一部分:Struts2:一个全新的框架** - **第1章:Struts2:现代Web应用框架**(第3...

    struts2 validation

    Struts2的核心功能包括视图渲染、动作调用、结果映射等,它通过拦截器机制实现了业务逻辑与控制逻辑的分离。 2. **验证的重要性** 在Web应用中,验证是必不可少的一环,因为未经验证的用户输入可能导致各种安全...

    Struts2简单开发环境的搭建(初级)

    Struts2是一个流行的Java web框架,它为开发者提供了一种结构化的、MVC(Model-View-Controller)架构来构建动态web应用。...但作为初学者,掌握上述基础知识足以让你开始学习和理解Struts2框架的工作原理。

    struts2入门小实例

    Struts2是一个强大的MVC(Model-View-...通过这个简单的Struts2入门实例,你可以对MVC模式和Struts2的工作原理有初步的认识。继续深入实践,你会发现Struts2是一个强大而灵活的工具,能帮助你高效地开发Java Web应用。

    struts上传问题研究

    当涉及到文件类型和大小的验证时,Struts2提供了`interceptor`拦截器来实现。例如,我们可以自定义一个`FileSizeInterceptor`,在其中检查文件大小,并在超过限制时抛出异常。对于文件类型,可以使用`contentType`...

    struts相关文档集锦

    - 示例项目:通过实际的项目案例,可以更好地理解Struts的工作原理和实际应用。 这个"struts相关文档集锦"可能包含上述所有内容的详细讲解,包括配置示例、代码解析、实战指导等,对开发者来说是深入学习和提升...

    struts2.1 示例

    2. **拦截器(Interceptor)**:Struts2的核心机制之一,拦截器可以在Action执行前后插入额外的功能,如日志记录、权限验证等,增强了框架的灵活性和可扩展性。 3. **配置方式**:Struts2支持XML和注解两种配置方式...

    Struts教程.ppt

    最后,其他PPT文件(Struts03至Struts05)可能涉及更高级的主题,如国际化、异常处理、 strutstags.tld自定义标签库、预定义的结果类型(Redirect、RedirectAction)、文件上传和下载,以及Struts的拦截器机制。...

    struct2学习资料

    这些资料将帮助你了解Struts2的架构设计、配置方式、拦截器实现以及如何在实际项目中应用Struts2。通过深入学习和实践,你可以熟练掌握这一重要的Java Web开发工具。 总结来说,Struts2是一个功能强大的MVC框架,...

    Structs 一天速成三天进阶

    5. **Struts 2的拦截器链**:深入研究拦截器的工作原理,自定义拦截器实现特定功能。 6. **Struts与Spring集成**:学习如何将Struts与Spring框架结合,利用Spring的依赖注入特性优化代码。 7. ** strut2的安全性**:...

    轻量级J2EE 企业应用实战 Struts+Spring+Hibernate整合开发

    - **Struts拦截器与过滤器**:讲解Struts中的拦截器和过滤器机制,以及如何自定义拦截器来增强应用程序的功能。 **4. Hibernate框架详解** - **Hibernate核心概念**:介绍了Hibernate的核心概念,如Session、...

Global site tag (gtag.js) - Google Analytics