若无人伴你 愿你成你自己的太阳。
如果一个Action中,有很多方法,拦截器默认会将这些方法全部拦截掉,而有的时候是不需要全部拦截的,此时需要使用方法拦截器,选择哪些方法需要拦截或者哪些方法不需要拦截。
怎么实现方法拦截器?
继承MethodFilterInterceptor
package com.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class InterceptorDemo3 extends MethodFilterInterceptor{
@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
System.out.println("拦截器生效");
return arg0.invoke();
}
}
struts.xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="root" namespace="/" extends="struts-default">
<!-- 配置拦截器 -->
<interceptors>
<interceptor name="Interceptor3" class="com.interceptor.InterceptorDemo3"></interceptor>
</interceptors>
<!-- Action方法 -->
<action name="*User" class="com.action.User" method="{1}">
<!-- 配置方法拦截器 -->
<interceptor-ref name="Interceptor3">
<param name="includeMethods">add,edit</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/{1}.jsp</result>
<!-- 配置需要动态调用的方法 -->
<allowed-methods >add,edit,delete</allowed-methods>
</action>
</package>
</struts>
Action方法:
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class User extends ActionSupport {
public String add(){
return "success";
}
public String edit(){
return "success";
}
public String delete(){
return "success";
}
}