struts2 lesson six struts2中的拦截器,过滤器,自定义拦截器,使用拦截器解决表单重复提交,常用标签的使用
1 拦截器拦截是动作(action),过虑器过虑的是请求(requet)一般映射为/*,过虑所有的请求。
2 拦截器是基于JAVA中反射机制的,而过虑器是基于函数回调
3 过虑器是依赖Servlet容器,而拦截器不依赖于Servlet容器。
4 拦截器可以访问Action上下文,值栈里的对象,而过虑器不能。
5 action的生命周期中,拦截器可以多次调用,而过虑器只能在容器初始化时被调用一次。
实现自定义拦截器 (是先进后出的原则)--实现对所有方法的拦截
第一种方法:action实现一个接口AbstractInterceptor
第一步定义一个interceptor (net.nw.interceptor.TestInterceptor)
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception
{
System.out.println("testInterceptor 拦截之前执行------------------");
String result = actionInvocation.invoke();
System.out.println("testInterceptor 拦截之后执行------------------");
return result;
}
第二步struts.xml
<!-- 定义拦截器--> 要主要配置包中配置如下
<interceptors>
<interceptor name="mySelfInterceptor1" class="net.nw.interceptor.TestInterceptor"></interceptor>
<interceptor-stack name="mydaultStatck">
<interceptor-ref name="mySelfInterceptor1"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref> 这句一定的加上
</interceptor-stack>
</interceptors>
<package name="userInterceptor" namespace="/userInterceptor" extends="default">
<action name="login" class="net.nw.action.UserInterceptorAction">
<interceptor-ref name="mydaultStatck"></interceptor-ref> <!-- 自定义拦截器 -->
<result>/success_login.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
第二种方法,实现对指定方法的拦截
第一步:实现这个接口 MethodFilterInterceptor 与第一种方法一样只是在struts.xml拦截器上那个加一个参数如下
<interceptors>
<interceptor name="mySelfInterceptor1" class="net.nw.interceptor.TestInterceptorMothed"></interceptor>
<interceptor-stack name="mydefaultStack">
<interceptor-ref name="mySelfInterceptor1">
<param name="excludeMethods">add</param><!-- 对add方法不进拦截 --> 也可以写包含那个方法
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
如果要返回结果集成执行一个方法则要实现一个接口PreResultListener
利用struts2来解决表单重复提交的问题
第一步:在struts.xml主包中加上一个配置如: <interceptor-ref name="token"></interceptor-ref> 或是:<interceptor-ref name="tokenSession"></interceptor-ref>后者不会跳转到错误页
第二步:在action方法中加一个提交页面:<result name="invalid.token">/toknner.jsp</result>
第三步:在jsp中加入一个唯一Key 如:<s:token/>
常用标签的使用
<s:form <s:textbox <s:checkboxlist <s:checkbox <s:set <s:include 静态包含,或是动态包含 <s:date <s:if <s:action <s:iterator
posted on 2013-05-12 10:30 peter.peng 阅读(195) 评论(0) 编辑 收藏 举报