一、自定义拦截器
struts2拦截器类似于servlet过滤器
首先定义一个拦截器这个拦截器实现了Interceptor接口:
package cn.orlion.interceptor; import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor{ @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void init() {
// TODO Auto-generated method stub } @Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
long start = System.currentTimeMillis();
String r = invocation.invoke(); System.out.println("action time=" + (System.currentTimeMillis() - start));
return r;
} }
这个过滤器在控制台打印出action运行的时间
在struts.xml中配置:
<package name="ognl" namespace="/" extends="struts-default"> <interceptors>
<interceptor name="my" class="cn.orlion.interceptor.MyInterceptor"></interceptor>
</interceptors>
<action name="ognl" class="cn.orlion.actions.OgnlAction">
<result>
/ognl.jsp
</result>
<interceptor-ref name="my"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action> </package>
当访问ognl.action时就会在控制台打印出时间
2、应用token拦截器
struts2提供了一个token interceptor,用于防止表单重复提交,示例:
在表单jsp页面的form表单里添加<s:token></s:token>
在struts.xml中配置:
<action name="tag" class="cn.orlion.actions.TagAction">
<result>
/tag.jsp
</result>
<result name="invalid.token">
/error.jsp
</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="my"></interceptor-ref>
</action>