自定义拦截器
自定义拦截器的三种方式
1. 实现Interceptor接口
2. 存活周期:随程序的开始创建 程序结束销毁
3. 他不会每次访问都创建一个拦截器
public class Demo01 implements Interceptor{
@Override
public void init() {
// TODO Auto-generated method stub
}
@Override
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
方式二:
1. 继承AbstractInterceptor类
@Override
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
return null;
}
方式三(必用)
1. 继承MethodFilterInterceptor 类
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
// 处理前
System.out.println("处理前");
//调用放行方法
// invoke 是执行完返回来的类
String invoke = invocation.invoke();
// 处理后
System.out.println("处理后");
return invoke;
}
写一个测试类 进行测试
/*
* 配置自定义拦截器
* 可以指定拦截 哪个 放行哪个
*/
public String add() {
System.out.println("add");
return "success";
}
public String delete() {
System.out.println("delete");
return "success";
}
public String update() {
System.out.println("update");
return "success";
}
public String find() {
System.out.println("find");
return "success";
}
配置struts2
<struts>
<package name="inter" namespace="/" extends="struts-default">
<action name="Demo01Action_*" class="com.lanou3g.intercept.Demo01Action" method="{1}">
<result name="success" type="dispatcher">/Hello.jsp</result>
</action>
</package>
</struts>
在page下面配置拦截器
<interceptors>
<!--注册自己定义的拦截器 -->
<!-- 这里写拦截器的类 -->
<interceptor name="Demo03" class="com.lanou.test.Demo03"></interceptor>
<!-- 注册拦截器栈 -->
<interceptor-stack name="myStack">
<!--放入栈中 -->
<interceptor-ref name="Demo03">
<!-- 设置不想拦截的方法 -->
<param name="excludeMethods">update,find</param>
</interceptor-ref>
<!--引用系统的拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 设置默认拦截器 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>