`

Struts2(9):开发自己的Struts2拦截器(编码与配置)

阅读更多

     要开发自己的Struts2拦截器类,需要实现Interceptor接口,并实现相应的三个方法 。或继承AbstractInterceptor类,只实现doIntercept方法。这两个类都在xwork.jar包中,路径为com.opensymphony.xwork2.interceptor。

 

拦截器类MyInterceptor

public class MyInterceptor implements Interceptor {
	

	public void destroy() {
		System.out.println("destroy...");
	}

	public void init() {
		System.out.println("init...");
	}

	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("my interceptor...");
		String result = invocation.invoke();
		return result;
	}
}

 init()方法会在服务器启动时自动执行,只会执行一次。

 

写好自己的拦截器类后,在struts2的配置文件struts.xml文件中也要做相应的配置,在package那层下,与其它action同级

<interceptors> 
		<interceptor name="myInterceptor" class="com.interceptor.MyInterceptor"></interceptor>	
</interceptors> 

 在action中使用刚配置好的自定义拦截器类

<action name="register" class="com.test.action.RegisterAction">
		<result name="success">/success.jsp</result>
		<result name="input">/register.jsp</result>	
		<interceptor-ref name="myInterceptor"></interceptor-ref>
</action>

 

当程序在调用register action时,会执行MyInterceptor的intercept方法。

注意:在action中使用自定义的拦截器后,Struts2中自带的默认拦截器都将失效,需手工将默认的拦截器也加入进来。如下,

<interceptor-ref name="defaultStack"></interceptor-ref>

 

默认的拦截器在struts2-core.jar包的根目录下,名称为struts-default.xml

 

我们在定义一个struts.xml文件时,都会声明此配置文件继承struts-default,如下,只有在使用了自定义的拦截器后,action才不会再调用默认的拦截器,所以需要手工将其再配置一次。

<package name="struts2" extends="struts-default">

 

2,在拦截器中定义变量hello,在配置文件中可定义此变更的值,可以声明拦截器处赋值,也可在使用的action处赋值,如
在声明处

<interceptor name="myInterceptor" class="com.interceptor.MyInterceptor">
	<param name="hello">world</param>
</interceptor>	

 

在action使用处,此处的赋值会覆盖上面的赋值

<action name="register" class="com.test.action.RegisterAction">
	<result name="success">/success.jsp</result>
	<result name="input">/register.jsp</result>	
	<interceptor-ref name="myInterceptor">
		<param name="hello">world2</param>		
	</interceptor-ref>
</action>

 

3,拦截器栈:它和拦截器类似,在一个拦截器栈中可以引用多个拦截器或多个拦截器栈。

<interceptor-stack name="myStack">
	<interceptor-ref name="myInterceptor"></interceptor-ref>		
	<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>

 拦截器栈采用的是先进后出的操作顺序,即在执行目标对象方法前,先按栈中拦截器的顺序执行拦截器中的方法,再执行目标对象的方法,执行完再按逆序执行栈中的方法。

interceptor1
interceptor2
execute(目标对象的方法)
interceptor2
interceptor1

 

4,改变默认拦截器,如下配置,如下可以声明一个默认拦截器,它与action平级

<default-interceptor-ref name="myStack"></default-interceptor-ref>

如果一个action中没有配置一个自定义地拦截器,则它会默认使用默认拦截器。注意:只能有一个默认的拦截器

 

5,方法过滤拦截器:需要继承MethodFilterInterceptor并实现doIntercept方法

自定义的拦截器会拦截action中的所有方法(除了javabean方法,即get,set方法)

public class MyMethodInterceptor extends MethodFilterInterceptor {
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		System.out.println("myMethodFilterInterceptor....");
		return invocation.invoke();
	}

 

在配置文件中声明此拦截器。

<interceptor name="myMethodInterceptor" class="com.interceptor.MyMethodInterceptor">

 

在action中配置,注意必须定义在其它拦截器前

<action name="register" class="com.test.action.RegisterAction">
	<result name="success">/success.jsp</result>
	<result name="input">/register.jsp</result>
	<interceptor-ref name="myMethodInterceptor">
		<param name="includeMethods">test1,execute</param> <!-- 包含,-->
		<param name="excludeMethods">test2,execute</param> <!-- 不包含,当一个方法在includeMethods和excludeMethods都有声明时,则includeMethods优先-->
	</interceptor-ref>
	<interceptor-ref name="myStack"></interceptor-ref>	
</action>

 

分享到:
评论

相关推荐

    Struts2编码拦截器

    解决Struts2中的中文乱码。该代码是用作Struts2的拦截器中

    struts03:拦截器、过滤器与拦截器的区别、文件上传

    综上所述,拦截器和过滤器在Web开发中各自扮演着重要角色,而文件上传作为常见的业务需求,可以通过Struts2框架中的拦截器机制进行高效且安全的实现。理解它们的工作原理和区别,有助于提高开发效率和代码质量。

    struts2整合spring实现拦截器

    在本文中,我们将深入探讨如何实现Struts2与Spring的集成,以及利用拦截器来增强应用的功能。 首先,Struts2 是一个基于MVC设计模式的开源Web框架,它提供了强大的控制器层,使得开发者可以更方便地处理HTTP请求和...

    struts2拦截器实现权限控制

    3. 配置拦截器栈:Struts2使用拦截器栈的概念,即将多个拦截器组织成一个栈,按照栈的顺序依次执行。在`struts.xml`中,可以创建一个或多个拦截器栈,并将权限拦截器包含在内。 4. 应用拦截器:在Action配置中,...

    struts2拦截器

    在Struts2中,拦截器的配置主要在struts.xml或struts-plugin.xml配置文件中完成,通过`&lt;interceptor&gt;`和`&lt;interceptor-stack&gt;`标签来定义和组织拦截器。 1. **解决乱码问题**:在处理HTTP请求时,尤其是涉及用户...

    struts2核心配置文件

    ### Struts2核心配置文件详解 #### 一、概述 Struts2框架是Java Web开发领域内一个重要的轻量级框架,它简化了基于MVC(Model-View-Controller)设计模式的应用程序开发过程。在Struts2框架中,有两个核心配置文件...

    struts2配置文件

    在配置文件中,我们可以定义Action类、对应的URL路径、结果视图以及与之关联的拦截器。例如: ```xml &lt;result name="success"&gt;/success.jsp ``` 这段配置表示当用户请求`saveUser`时,将调用`...

    SSH笔记_Struts2配置

    - **应用配置**:在`struts.xml`中定义Action、结果类型、拦截器栈等,这是应用的核心配置文件。 3. **Action配置** - **Action类**:通常继承自`ActionSupport`,实现业务逻辑。每个Action对应一个特定的用户...

    struts2拦截器权限判断实例

    在Struts2中,拦截器扮演着核心角色,它们允许开发者实现一些通用的行为,如日志记录、权限检查、事务管理等,而无需将这些逻辑硬编码到每个动作类中。本实例主要关注的是如何使用Struts2拦截器进行权限判断。 首先...

    Struts1和Struts2区别

    - **Struts2**:与Spring、Hibernate等框架集成更加方便,内置了对这些框架的支持。 9. 性能: - **Struts1**:由于其设计模式,可能存在性能瓶颈,特别是在高并发场景下。 - **Struts2**:通过拦截器和更优化的...

    Struts 2使用注解配置Action

    在传统的Struts 2应用中,我们通常会通过XML配置文件(struts.xml)来定义Action,包括Action类、结果页面、拦截器等信息。然而,随着Java注解的广泛应用,Struts 2也引入了注解配置的方式来简化开发过程,避免了XML...

    模拟Struts2拦截器代码

    在Struts2中,过滤器(Filter)虽然与拦截器有相似的作用,但它们是基于Servlet API的,通常用于处理HTTP请求的预处理和后处理,如登录检查、字符编码转换等。过滤器通过实现`javax.servlet.Filter`接口并在`web.xml...

    Struts2技术内幕 深入解析Struts架构设计与实现原理

    2. **动态代理**:Struts2使用动态代理技术实现了AOP(面向切面编程),使得开发者可以通过配置而非编码的方式实现拦截器的调用。 3. **类型转换**:Struts2内置了一套类型转换机制,能够自动将请求参数转换为Action类...

    Struts2 Design and Programming: A Tutorial.pdf

    2. **Struts2拦截器(Interceptors)** - 拦截器是Struts2的重要特性,它可以插入到Action调用的链路中,执行预处理和后处理任务,如登录验证、日志记录、性能统计等。 - 默认的拦截器栈包括了异常处理、参数校验和...

    struts2配置文件详细说明

    配置文件在Struts2中起着至关重要的作用,它定义了框架的行为、动作映射、拦截器和其他关键设置。以下是Struts2配置文件的一些核心元素和属性的详细说明: 1. **配置文件结构**: Struts2的配置通常存储在一个名为...

    struts2全部的jar包

    拦截器是Struts2的一大特色,它们可以插入到Action调用链中,实现如日志、事务管理、性能监控等功能。默认提供了一些内置拦截器,如Validation、ExceptionMapping等。 5. **插件体系**: Struts2支持丰富的插件,...

    基于Struts2的留言板系统.zip

    4. **配置文件**: Struts2的配置文件通常为struts.xml,用于定义Action、结果类型、拦截器等。这里会配置Action类的路径、处理方法以及视图的跳转。 5. **JSP和Servlet**: 视图部分通常由JSP(JavaServer Pages)...

    struts2配置文件传值中文乱码

    Struts2通过拦截器(Interceptor)和配置文件实现了灵活的功能扩展,其中配置文件用于定义控制器、拦截器、结果类型等组件,是框架运行的核心。 ### 问题背景:中文乱码成因分析 在Struts2框架中,中文乱码问题...

    JavaWeb中Struts2拦截器深入分析(一)

    Struts2 拦截器是JavaWeb开发中Struts2框架的核心组件之一,它基于AOP(面向切面编程)理念,允许开发者在Action方法执行前后插入自定义逻辑。拦截器与Servlet中的过滤器虽然在功能上有相似之处,但它们在设计和使用...

Global site tag (gtag.js) - Google Analytics