Struts2拦截器的自定义实现

为了实现自定义拦截器,Struts2提供了Interceptor接口,以及对该接口实现的一个抽象拦截器类(AbstractInterceptor)。实现拦截器类一般可以实现Interceptor接口,或者直接继承AbstractInterceptor类。Struts2还提供了一个MethodFilterInterceptor类,该类是AbstractInterceptor类的子类,若要实现方法过滤,就需要继承MethodFilterInterceptor,设计方法拦截器。

       用户定义一个拦截器一般需要一下3个步骤:

  1. 自定义一个实现Interceptor接口(或继承AbstractInterceptor或继承MethodFilterInterceptor)的类。
  2. 在struts.xml中注册上一步中定义的拦截器。
  3. 在需要使用的Action中引用上述定义的拦截器。

先写一个input.jsp页面,让它跳转到Action中

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="Action1.action">请点击跳转</a>
</body>
</html>

Action.java

package Action;

import com.opensymphony.xwork2.ActionSupport;

public class Action1 extends ActionSupport {
	@Override
	public String execute() throws Exception {
		System.out.println("Action1执行了");
		return SUCCESS;
	}
}

再写个要跳转到的jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	//	System.out.println("拦截器01执行了");
	%>
</body>
</html>

还有拦截器,我用的是继承AbstractInterceptor类。

拦截器1.java

package interceptor;

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

public class interceptor1 extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("拦截器1执行了...");
		String Obj = invocation.invoke();
		System.out.println("拦截器1执行结束了...");
		return Obj;
	}
}

拦截器2.jsp

package interceptor;

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

public class interceptor2 extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("拦截器2执行了...");
		String Obj = invocation.invoke();
		System.out.println("拦截器2执行结束了...");
		return Obj;
	}
	
}

然后还要配置struts.xml文件

<package name="default" namespace="/" extends="struts-default">
		<!-- 定义拦截器 -->
		<interceptors>
			<interceptor name="interceptor1" class="interceptor.interceptor1">            
            </interceptor>
			<interceptor name="interceptor2" class="interceptor.interceptor2">
            </interceptor>
			<!-- 定义拦截器栈 -->
            <!-- 引入拦截器(一旦引入自定义的拦截器,默认拦截器栈的拦截器就不执行了) -->
			<interceptor-stack name="myStack">
                <!-- 引入默认拦截器 -->
				<interceptor-ref name="defaultStack"></interceptor-ref>
                <!-- 引入自定义拦截器 -->
				<interceptor-ref name="interceptor1"></interceptor-ref>				
				<interceptor-ref name="interceptor2"></interceptor-ref>				
			</interceptor-stack>
		</interceptors>
		<action name="Action1" class="Action.Action1">
			<result>/拦截器01.jsp</result>
			<interceptor-ref name="myStack"></interceptor-ref>
		</action>
</package>

运行结果:

猜你喜欢

转载自blog.csdn.net/abc1498880402/article/details/84073781