struts2 拦截器的施用(继承方法拦截器)
struts2 拦截器的使用(继承方法拦截器)
import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; public class ExampleInterceptor extends MethodFilterInterceptor { //重写方法拦截器拦截方法 @Override protected String doIntercept(ActionInvocation arg0) throws Exception { System.out.println("start invoking3..."); String result = arg0.invoke(); System.out.println("end invoking3..."); return result; }LoginAction中增加了method方法 public String method()throws Exception { FORWARD = "success"; return FORWARD; }
<struts> <!-- Action所在包定义 --> <package name="C04.3" extends="struts-default"> <!-- 拦截器配置定义 --> <interceptors> <interceptor name="example" class="com.example.struts.interceptor.ExampleInterceptor"> </interceptor> </interceptors> <!-- 缺省拦截器栈配置定义 <default-interceptor-ref name="example"></default-interceptor-ref> --> <!-- Action名字,类以及导航页面定义 --> <!-- 通过Action类处理才导航的的Action定义 --> <action name="Login" class="com.example.struts.action.LoginAction" method="method"> <result name="input">/jsp/login.jsp</result> <result name="success">/jsp/success.jsp</result> <!-- Action方法拦截器配置定义 --> <interceptor-ref name="example"> <!-- 被拦截方法配置定义 --> <param name="includeMethods">method</param> <!-- 不被拦截方法配置定义 --> <param name="excludeMethods">method,execute</param> </interceptor-ref> </action> </package> </struts>
LoginAction.java中又定义了一个名为“method”方法,在struts.xml配置文件中,因为LoginAction中有execute方法,又有method方法,因此在<Action>中,请读者注意struts.xml中黑体部分,该部分代码表示现在LoginAction只执行method方法,而execute方法不被执行。笔者在<Action>中增加了一个“method”属性,该属性中“=”后面的内容是Action中具体方法名,如果不写“method”属性,Action是缺省执行execute方法。如果写了“method”属性,Action就执行“=”后写的具体方法。而不会执行execute方法。“example”拦截器还是如之前在<Action>前定义。在<Action>中配置“example”拦截器,笔者增加了“includeMethods”和“excludeMethods”两个param属性定义。“includeMethods”表示的是被拦截器拦截的方法。方法名写在<param>和</param>之间,如果有多个方法开发人员需要拦截器拦截,则方法名之间以“,”相隔。“excludeMethods”表示的是不被拦截器拦截的方法。如果有多个方法,也是以“,”相隔
struts.xml配置文件中要么没有<default-interceptor-ref >定义,如果定义了也只能定义一次。该标签在struts.xml配置文件中只能写在<Action>前,而且只能写一次。不能重复定义它