<body> <h3>用户登录</h3> <form action="login" method = "post"> username:<input type = "text" name = "username"/><br/> password:<input type = "text" name = "password"/><br/> <input type = "submit" value = "submit"/> </form> </body>2、LoginAction
public class LoginAction extends ActionSupport{ private String username; private String password; //...setter/getter.... public String execute()throws Exception{ return SUCCESS; } }3、定义自己的拦截器MyInterceptor
public class MyInterceptor implements Interceptor { private String test; public void destroy() { System.out.println("MyInterceptor is destory!"); } public void init() { System.out.println("MyInterceptor is init !"); } public String intercept(ActionInvocation arg0) throws Exception { System.out.println("intercept before"); String temp = arg0.invoke(); //该方法为如果下面有烂机器就调用下一个,如果没有就执行Action。 System.out.println("MyInterceptor is intercept:"+temp); System.out.println("intercept after"); return temp; } public String getTest() { return test; } public void setTest(String test) { this.test = test; } }4、配置文件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> <package name="struts2" extends="struts-default"> <!-- 配置拦截器 --> <interceptors> <interceptor name="myInterceptor" class="com.liusheng.interceptor.MyInterceptor"> <!-- 配置初始化参数 ,与成员变量对应赋值,在给成员变量赋值时机在init方法之前进行--> <param name="test">test</param> </interceptor> </interceptors> <action name="login" class="com.liusheng.action.LoginAction"> <result name="success">index.jsp</result> <!-- exception:是对于抛出该处出现的异常进行处理 result:自定义的结果名,有其对应的result进行处理 --> <!-- 配置拦截器,拦截器按照配置的顺序依次拦截 --> <interceptor-ref name="myInterceptor"></interceptor-ref> <!-- 一旦使用了自定义的拦截器,默认的拦截器就不会起作用,因此需要手动在自定义拦截器后 配置默认拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>
方法拦截器(可以对指定方法进行拦截):MethodFilterInterceptor
如果既没有指定includeMethods参数,也没有指定execludeMethods参数,那么所有的方法都有会被拦截。
依旧延续以上的案例public class MyMethodInterceptor extends MethodFilterInterceptor { @Override protected String doIntercept(ActionInvocation arg0) throws Exception { //可以添加监听器 arg0.addPreResultListener(new TheLisener()); System.out.println("method interceptor before"); String s = arg0.invoke(); System.out.println("method interceptor after"); return s; } }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> <package name="struts2" extends="struts-default"> <!-- 配置拦截器 --> <interceptors> <interceptor name="myInterceptor" class="com.liusheng.interceptor.MyInterceptor"> <!-- 配置初始化参数 ,与成员变量对应赋值,在给成员变量赋值时机在init方法之前进行--> <param name="test">test</param> </interceptor> <!-- 配置方法拦截器 --> <interceptor name="methodInterceptor" class="com.liusheng.interceptor.MyMethodInterceptor"></interceptor> </interceptors> <action name="login" class="com.liusheng.action.LoginAction"> <result name="success">index.jsp</result> <!-- exception:是对于抛出该处出现的异常进行处理 result:自定义的结果名,有其对应的result进行处理 --> <!-- 配置拦截器,拦截器按照配置的顺序依次拦截 --> <interceptor-ref name="myInterceptor"></interceptor-ref> <interceptor-ref name="methodInterceptor"> <param name="includeMethods">execute</param> <param name="execludeMethods"></param> </interceptor-ref> <!-- 一旦使用了自定义的拦截器,默认的拦截器就不会起作用,因此需要手动在自定义拦截器后 配置默认拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> </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> <package name="struts2" extends="struts-default"> <!-- 配置拦截器 --> <interceptors> <interceptor name="myInterceptor" class="com.liusheng.interceptor.MyInterceptor"> <!-- 配置初始化参数 ,与成员变量对应赋值,在给成员变量赋值时机在init方法之前进行--> <param name="test">test</param> </interceptor> <!-- 配置方法拦截器 --> <interceptor name="methodInterceptor" class="com.liusheng.interceptor.MyMethodInterceptor"></interceptor> <!-- 定义拦截器栈 --> <interceptor-stack name="myDefaultInterceptorStack"> <interceptor-ref name="myInterceptor"></interceptor-ref> <interceptor-ref name="methodInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 自定义默认的拦截器栈,替换掉了系统默认的拦截器栈 --> <default-interceptor-ref name="myDefaultInterceptorStack"></default-interceptor-ref> <action name="login" class="com.liusheng.action.LoginAction"> <result name="success">index.jsp</result> <!-- exception:是对于抛出该处出现的异常进行处理 result:自定义的结果名,有其对应的result进行处理 --> <!-- 配置拦截器,拦截器按照配置的顺序依次拦截 --> <interceptor-ref name="myInterceptor"></interceptor-ref> <interceptor-ref name="methodInterceptor"> <param name="includeMethods">execute</param> <param name="execludeMethods"></param> </interceptor-ref> <!-- 一旦使用了自定义的拦截器,默认的拦截器就不会起作用,因此需要手动在自定义拦截器后 配置默认拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>