Struts2的拦截器入门

1 拦截器与过滤器的区别?

  • Struts2的核心功能都是依赖拦截器实现
  • Filter:过滤器,过滤从客户端向服务器发送的请求
  • Interceptor:拦截器,拦截是客户端对Action的访问。更细粒度化的拦截。(拦截Action中的具体的方法)。

2 Struts的拦截器入门

2.1 编写拦截器类

  • 实现Interceptor接口

服务器启动的时候执行init方法,在String str = invocation.invoke()前的是前处理,在其后的是后处理

package com.itykd.web.interceptor;

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

public class MyInterceptor1 implements Interceptor{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("MyInterceptor1销毁了.....");
	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		System.out.println("MyInterceptor1初始化.....");
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("MyInterceptor1执行了....");
		String str = invocation.invoke();
		System.out.println("MyInterceptor1执行结束了....");
		return str;
	}
}
  • 继承AbstractInterceptor类
package com.itykd.web.interceptor;

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

public class MyInterceptor2 extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("MyInterceptor2执行了....");
		String str = invocation.invoke();
		System.out.println("MyInterceptor2执行结束了....");
		return str;
	}
}
  • 继承MethodFilterInteceptor类
package com.itykd.web.interceptor;

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

public class MyInterceptor3 extends MethodFilterInterceptor{



	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		System.out.println("MyInterceptor3执行了....");
		String str = invocation.invoke();
		System.out.println("MyInterceptor3执行结束了....");
		return str;
	}
}

2.2 在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>
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
    <package name="demo1" extends="struts-default" namespace="/">
        <!-- 定义拦截器 -->
        <interceptors>
            <interceptor name="myInterceptor1" class="com.itykd.web.interceptor.MyInterceptor1"/>
            <interceptor name="myInterceptor2" class="com.itykd.web.interceptor.MyInterceptor2"/>
            <interceptor name="myInterceptor3" class="com.itykd.web.interceptor.MyInterceptor3"/>
        </interceptors>
        <action name="interceptorAction1" class="com.itykd.web.action.InterceptorAction1">
            <result name="success">/demo1.jsp</result>
            <!-- 引入拦截器栈 (一旦引入自定义拦截器,默认拦截器栈的拦截器就不执行了)-->
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="myInterceptor1"/>
            <interceptor-ref name="myInterceptor2"/>
            <interceptor-ref name="myInterceptor3"/>
        </action>
    </package>
</struts>
  • 定义一个拦截器栈
<?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>
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
    <package name="demo1" extends="struts-default" namespace="/">
        <!-- 定义拦截器 -->
        <interceptors>
            <interceptor name="myInterceptor1" class="com.itykd.web.interceptor.MyInterceptor1"/>
            <interceptor name="myInterceptor2" class="com.itykd.web.interceptor.MyInterceptor2"/>
            <interceptor name="myInterceptor3" class="com.itykd.web.interceptor.MyInterceptor3"/>
            <!-- 定义拦截器栈 -->
            <interceptor-stack name="myStack">
                <interceptor-ref name="defaultStack"/>
                <interceptor-ref name="myInterceptor1"/>
                <interceptor-ref name="myInterceptor2"/>
                <interceptor-ref name="myInterceptor3"/>
            </interceptor-stack>
        </interceptors>
        <action name="interceptorAction1" class="com.itykd.web.action.InterceptorAction1">
            <result name="success">/demo1.jsp</result>
            <!-- 引入拦截器栈 (一旦引入自定义拦截器,默认拦截器栈的拦截器就不执行了)-->
            <interceptor-ref name="myStack"/>
        </action>
    </package>
</struts>
  • 拦截的Action类 
package com.itykd.web.action;

import com.opensymphony.xwork2.ActionSupport;

public class InterceptorAction1 extends ActionSupport{
	public String execute() {
		System.out.println("InterceptorAction1开始执行了.....");
		
		return SUCCESS;
	}
}

猜你喜欢

转载自blog.csdn.net/W2612888/article/details/85063315