Struts2拦截器配置

Struts2框架的大部分功能都是通过拦截器来完成的。默认情况下所以的package都会继承默认的struts-default包,这样就可以使用Struts的大量默认拦截器。
<package name="userModel" namespace="/" extends="struts-default">
<!-- struts2拦截器  拦截该包的所有action-->
<interceptors>
  <interceptor name="myLogin" class="oms.odc.eq.intercept.LoginIntercept"></interceptor>
  <interceptor-stack name="myInterceptor">
   <interceptor-ref name="myLogin"/>
   <interceptor-ref name="defaultStack"/>
  </interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInterceptor"/>

<!-- struts2拦截器 -->
<!-- 全局跳转到登陆页面 -->
<global-results>  
           <result name="loginFail">/login.jsp</result>
    </global-results>  
<!-- 全局跳转到登陆页面 -->
</package>

public class LoginIntercept extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
  // TODO Auto-generated method stub
 
  Object username = invocation.getInvocationContext().getSession().get(
    "username");
  Object password = invocation.getInvocationContext().getSession().get(
    "password");
  System.out.println(username+"intercept"+password);
  if (username == null || password == null) {
  
   return "loginFail";//失败调回login.jsp页面
  
  } else {
 
   String result = invocation.invoke();//通过
   System.out.println(result);
   return result;
  }
}
}
web.xml
<filter>
  <filter-name>struts2</filter-name>
  <filter-class>
   org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  </filter-class>
</filter>

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
///////////////////////////


1、自定义全局拦截器
   在Struts.xml里增加 <interceptor name="拦截器别名" class="拦截器实现类" >
为其他包引用的方便可以把多个拦截器放在一起,组成拦截器栈:

  <interceptor-stack name="拦截器栈别名">
       <interceptor name="拦截器别名1" class="拦截器实现类" >
       <interceptor name="拦截器别名2" class="拦截器实现类" >
  </interceptor-stack>

2、在action中使用拦截器
<action name="" class=""  extends="struts-default">
    <interceptor-ref="拦截器栈别名">
</action>

3、配置默认的拦截器(每个包只能定义一个默认拦截器)
  当配置一个包后,可以为其指定特定的拦截器。这样如果该包中的ACTION没有配置拦截器,那么默认的拦截器将起作用
<default-interceptor-ref name="拦截器栈别名">

4、实现拦截器需继承AbstractInterceptor类

5、在默认情况下,如何某个Action定义了拦截器,这个拦截器会拦截Action的所以方法,如果不想拦截所以方法,可以使用Struts2的方法过滤特性。
<action name="" class=""  extends="struts-default">
    <interceptor-ref="拦截器栈别名">
   <param name="excludeMethods">拦截器别名1,拦截器别名2</param>   < ————屏蔽的拦截
   <param name="includeMethods">拦截器别名2</param>                      <————开启拦截
</action>
  6、Struts2拦截器的执行顺序
   并不是先配置的先拦截,在execute方法执行前的动作按顺序拦截,在execute方法执行之后的动作逆序执行,也就是说配置在后面的先执行。

你可能感兴趣的:(apache,框架,jsp,xml,struts)