Struts中最核心的应该就是拦截器了,通过拦截器struts可以帮我们实现数据转换、数据校验、国际化等多种功能,拦截器实现的原理是动态代理,关于动态代理可以参考这篇文章:Java动态代理 下面将实现自定义拦截器:
创建一个类,实现Tnterceptor接口
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
//也可以继承AbstractInterceptor类,这样就可以不用重写destroy()和init()
public class MyInterceptor implements Interceptor {
//可以定义一些属性,并提供相应的setter方法,用于接收参数
@Override
public void destroy() {
System.out.println("销毁时调用");
}
@Override
public void init() {
System.out.println("初始化时调用");
}
@Override
public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("拦截前执行");
String result = arg0.invoke();
System.out.println("拦截后执行");
return result;
}
}
配置struts.xml文件:
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.objectFactory" value="spring" />
<include file="struts-default.xml" />
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="com.jyu.interceptor.MyInterceptor">
<!-- <param name="参数名">参数值</param> 用于向拦截器传递参数 -->
</interceptor>
</interceptors>
<action name="userAction" class="com.jyu.action.UserAction"
method="execute">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
<interceptor-ref name="myInterceptor"></interceptor-ref>
<!-- 使用struts默认的拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>