在struts中儘量避免自定義攔截器,因為大部分需要自己定義攔截器的時候,設計思路就不對了。大部分攔截器框架都有給你定義好了。而且如果在struts中定義攔截器相當於和這個框架繫結了,假如以後要擴充套件或者換框架,就可能要重新在新框架中寫個攔截器。
總之儘量不要自定義struts的攔截器。再次引用一句諺語:Don't Reinvent the Wheel。
攔截器的使用實踐的是面向切面程式設計思想。
攔截器的使用格式:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="test" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="my" class="test.interceptor.MyInterceptor"></interceptor>
</interceptors>
<action name="test" class="com.bjsxt.action.TestAction">
<result>/test.jsp</result>
<interceptor-ref name="my"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref><!-- 預設的攔截器不要被覆蓋,此處書寫順序表示預設的攔截器在外邊,自定義的在裡邊 -->
</action>
</package>
</struts>
自定義攔截器寫法:
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class MyInterceptor implements Interceptor {
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation invocation) throws Exception {
long start = System.currentTimeMillis();
String r = invocation.invoke();
long end = System.currentTimeMillis();
System.out.println("action time = " + (end - start));
return r;
}
}
struts中的現成的攔截器: