1.拦截器的概述

拦截器是Struts2的核心组成部分,他可以动态拦截Action调用的对象,类似于Servlet中的过滤器。

2.拦截器的工作原理

拦截器是以代理方式调用的,他在一个Action执行前后进行拦截,围绕着Action和Result的执行而执行。
首先执行Action配置的拦截器,Action和Result执行之后,拦截器再次执行。
struts2-拦截器的学习

3.拦截器的配置

  1. 拦截器
	//配置拦截器
	<interceptor name="interceptorName" class="interceptorClass">
		<param name="paramName">paramValue</param>
	</interceptor>
  1. 拦截器栈
    拦截器栈是由多个拦截器构成的。
    定义拦截器栈用interceptors元素和interceptor-stack子元素,配置多个拦截器时使用interceptor-ref元素。
		<interceptors>
			<interceptor-stack name="interceptorStackName">
				<interceptor-ref name="interceptorName1">
				<interceptor-ref name="interceptorName2">
				<interceptor-ref name="interceptorName3">
				......
			</interceptor-stack>
		</interceptors>
  1. 默认拦截器
    默认拦截器可以对指定的包中所有的Action都能起到拦截的作用。配置默认拦截器使用default-interceptor-ref元素。
	//name必须是已存在的拦截器或者拦截器栈
	<default-interceptor-ref name="name">
  1. 拦截器的简单实现
  • index.jsp
	 <%@ taglib prefix="s" uri="/struts-tags"%>

<s:form action="testAction">
		<s:textfield label="msg" name="message"></s:textfield>
		<s:submit value="提交"></s:submit>
	</s:form>
  • struts.xml
	<package name="hello" namespace="/" extends="struts-default">
			<action name="testAction" class="com.action.InterceptorAction">
			<result name="success">/success.jsp</result>
			
			<!-- 如果使用系统其他拦截器,该Action的默认拦截器会消失,必须手动添加默认拦截器 -->
			<interceptor-ref name="defaultStack"></interceptor-ref>
			
			<!--配置token拦截器(令牌拦截器,避免重复提交)  -->
			<interceptor-ref name="token"></interceptor-ref>
			<result name="invalid.token">/error.jsp</result>
		</action>
	</package>
  • InterceptorAction.java
	public class InterceptorAction extends ActionSupport{
	private static final long serialVersionUID = 1L;
	private String message;
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	@Override
	public String execute() throws Exception {
		System.out.println("页面提交的message");
		Thread.sleep(1000);
		System.out.println(message);
		return SUCCESS;
	}
}
  • error.jsp和success.jsp页面自己添加。

相关文章: