struts2 拦截器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2 拦截器相关的知识,希望对你有一定的参考价值。
拦截器,作用是在执行方法执行,进行过滤拦截。
struts2 拦截器的几种方式
声明拦截器,然后在Action中引用声明的拦截器
默认拦截器,在当前package下有且只能有一个默认拦截器
作用:在当前package下所有的action都会经过默认拦截器拦截,当action中引入拦截器时,
默认拦截器失效。
拦截器栈,把相关一组拦截器放在栈中,这样在action中就不必引入多个拦截器,直接引入拦截器栈就可以了,系统默认拦截器栈是 defaultStack ,如果自定义了拦截器栈,系统默认拦截器栈就不会起作用,这样我们需要手动引入系统默认拦截器栈,defaultStack
注意:对于拦截器先后顺序,引入的前后就是拦截器的先后顺序。
自定义结果类型
对于默认的结果类型是 dispatch redirect redirectAction chain
下面看下具体的实现步骤
介绍拦截器
package com.struts2.action; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; @SuppressWarnings("serial") public class MyInter implements Interceptor{ /* * 在拦截器结束后,的销毁方法 * */ @Override public void destroy() { } /** * 已进入拦截器,初始化方法 */ @Override public void init() { } /** * 这里是拦截器的核心方法,写一些在执行action方法之前的一些逻辑 */ @Override public String intercept(ActionInvocation ai) throws Exception { System.out.println("-----拦截器-------"); ai.invoke(); return null; } }
2.拦截器写好了,我们看下配置,引入了自己的拦截器,系统默认就不会引用,需要添加上
<interceptors> <interceptor name="myInter" class="com.struts2.action.MyInter"/> </interceptors>
拦截器声明好了之后,如果想在某个action中用到拦截器,需要引用配置,配置信息如下
<action name="*_*" class="com.struts2.action.{1}" method="{2}"> <!-- 引入拦截器 --> <interceptor-ref name="myInter"></interceptor-ref> <!-- 系统默认拦截器栈 --> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="login">/login.jsp</result> </action>
3.默认拦截器配置
<!-- 默认拦截器,当前package下的所有action都会执行这个拦截器,如果在action中引用了拦截器, 默认的就会失效 默认拦截器,可以是一个拦截器,也可以是一个拦截器栈 如果是一个拦截器,那么在action方法不会有系统默认拦截器栈,如果在action中引入系统默认拦截器, 那么默认拦截器又不会起作用,所有通常来说,默认拦截器写成拦截器栈,在默认拦截器栈中引入系统 默认拦截器 --> <!-- 声明拦截器 --> <interceptors> <interceptor name="myInter" class="com.struts2.action.MyInter"/> <interceptor name="myInter1" class="com.struts2.action.MyInter1"/> <interceptor name="myInter2" class="com.struts2.action.MyInter2"/> <!-- 拦截器栈,把多个拦截器大包,这样引用的时候,就可以直接引用拦截器栈名称 --> <interceptor-stack name="mi"> <interceptor-ref name="myInter"/> <interceptor-ref name="myInter1"/> <interceptor-ref name="myInter2"/> <!-- 把系统默认拦截器栈引入进来 --> <interceptor-ref name="defaultStack"/></interceptor-stack> </interceptors> <!-- 默认拦截器,当前package下的所有action都会有这个拦截器,除非在action中引用拦截器,默认的就会失效 --> <default-interceptor-ref name="mi"></default-interceptor-ref>
4.拦截器栈
<!-- 声明拦截器 --> <interceptors> <interceptor name="myInter" class="com.struts2.action.MyInter"/> <interceptor name="myInter1" class="com.struts2.action.MyInter1"/> <interceptor name="myInter2" class="com.struts2.action.MyInter2"/> <!-- 拦截器栈,把多个拦截器大包,这样引用的时候,就可以直接引用拦截器栈名称 --> <interceptor-stack name="mi"> <interceptor-ref name="myInter"/> <interceptor-ref name="myInter1"/> <interceptor-ref name="myInter2"/> </interceptor-stack> </interceptors> <action name="*_*" class="com.struts2.action.{1}" method="{2}"> <!-- 引入拦截器栈 --> <interceptor-ref name="mi"></interceptor-ref> <!-- 引入系统默认拦截器栈,如果没有系统默认拦截器栈, 那么关于系统的方法就不能使用,比如,从页面传参,action接收不到 --> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="login" type="redirect">/login.jsp</result> <result name="index" type="redirect">/index.jsp</result> <result name="error">/error.jsp</result> </action>
5.自定义返回结果类型
我们先实现自定义结果返回的跳转方式
package com.struts2.action; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.apache.struts2.result.StrutsResultSupport; import com.opensymphony.xwork2.ActionInvocation; /** * @author admin * 自定义拦截器结果类型 */ @SuppressWarnings("serial") public class CustomType extends StrutsResultSupport{ /** * 这里我们默认跳转方式为 重定向 */ @Override protected void doExecute(String location, ActionInvocation invocation) throws Exception { HttpServletResponse response = ServletActionContext.getResponse(); String contexPath = ServletActionContext.getRequest().getContextPath(); response.sendRedirect(contexPath+location); } }
看下如何配置
<!-- 自定义拦截器结果类型 --> <result-types> <result-type name="defa" class="com.struts2.action.CustomType"></result-type> </result-types> <action name="*_*" class="com.struts2.action.{1}" method="{2}"> <!-- 这里type就是我们上面自定义的结果返回类型 --> <result name="login" type="defa">/login.jsp</result> </action>
匆匆的写的,可能会有所疏漏,如有不足,请多多指导。
本文出自 “11134439” 博客,请务必保留此出处http://11144439.blog.51cto.com/11134439/1928509
以上是关于struts2 拦截器的主要内容,如果未能解决你的问题,请参考以下文章