Struts2拦截器有三种写法,这里都列举出来供大家参考。推荐使用最后一种 (拦截器就是一个java类)

第一种

package test;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

//拦截器:第一种创建方式
//拦截器生命周期:随着项目启动而创建。随着项目关闭而销毁
public class MyInterceptor implements Interceptor{
	public void init() {
		// TODO Auto-generated method stub
	}

	public void destroy() {
		// TODO Auto-generated method stub
	}

	//拦截方法
	public String intercept(ActionInvocation arg0) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}
}

第二种:

package test;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

//创建方式2:继承AbstractInterceptor
//帮我们空实现了 init 和 destory 方法,
public class MyInterceptor2 extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		
		return null;
	}

}

 

第三种:

package test;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

//继承:MethodFilterInterceptor 方法过滤拦截器
public class MyInterceptor3 extends MethodFilterInterceptor{

	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		//前处理
		System.out.println("前处理。。。");
		
		//放行
		invocation.invoke();
		
		//后处理
		System.out.println("后处理。。。");
		
		//不放行直接跳转这个页面。
		//不执行后续的拦截器以及action,直接交给Result处理结果及,进行页面跳转
		return "success";
	}

}

 

action书写

package test;

import com.opensymphony.xwork2.ActionSupport;

public class DemoAction extends ActionSupport{


	public String execute() throws Exception {
		System.out.println("DemoACtion");
		return SUCCESS;
	}
	

}

struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	
	<package name="hello" namespace="/" extends="struts-default">
		<interceptors>
			<!--1、注册拦截器	 -->	
			<!-- name随便取 class  拦截器完整类名 -->
			<interceptor name="myInter3" class="test.MyInterceptor3"></interceptor>		
			<!-- 2、注册拦截器栈 -->
			<interceptor-stack name="myStack">
				<!-- 自定义拦截器引入  (一般放在默认拦截器之前)name 和注册拦截器name一致 -->
				<interceptor-ref name="myInter3"></interceptor-ref>
				<!-- 默认20个拦截器栈    name属性值是定值-->
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>		
		
		</interceptors>		
		<!-- 3、指定默认拦截器栈  整个包的拦截器 -->	
		<!-- name和注册拦截器栈name一致 -->
		<default-interceptor-ref name="myStack"></default-interceptor-ref>		
			
		
		<action name="DemoAction" class="test.DemoAction" method="execute">	
			<!-- 
				为单独指定action走那个栈 
				<interceptor-ref name="myInter3"></interceptor-ref>		
			-->			
			<result name="success" >/hello.jsp</result>
		</action>
	</package>
	
</struts>

上面的三种拦截器随便选一个配上action和struts.xml就成了一个完整的拦截器。

当然仅仅是这样是无法完成我们的要求的,有时候我们配置了一个拦截器,并不需要拦截action所有的方法,只需要拦截部分方法,下面我就来教大家怎么配置拦截器,拦截部分方法。同样的给出代码  

这个配置默认位置也给出来

action

interceptor 

struts.xml  (为了防止有人手打出错了,这里给出代码和图片)

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	
	<package name="hello" namespace="/" extends="struts-default">
		<interceptors>		
			<interceptor name="myInter1" class="interceptorMethod.Interceptor1"></interceptor>			
			<interceptor-stack name="myStack">
				<!-- 自定义拦截器引入(建议放在20个拦截器之前) -->
				<interceptor-ref name="myInter1">
					<!-- 两种方法取一个 -->
					<!-- add 和 delete都是方法名, 方法名中间用逗号隔开 -->
					<!-- 
						指定哪些方法不拦截
					 	<param name="excludeMethods">add,delete</param> 
					 -->
					 <!-- 指定哪些方法需要拦截 -->
					 <param name="includeMethods">add</param>
				</interceptor-ref>
				<!-- 引用默认的拦截器栈(20个) -->
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>				
		</interceptors>		
		<!-- name  -->
		<default-interceptor-ref name="myStack"></default-interceptor-ref>		
		
		<action name="Demo1Action_*" class="interceptorMethod.Demo1Action" method="{1}">				
			<result name="success" >/hello.jsp</result>
		</action>
	</package>
</struts>