1. 程式人生 > >Struts2中的攔截器使用方法

Struts2中的攔截器使用方法

攔截器的介紹

什麼是攔截器?

當一個請求到服務端首先在MVC模式下會執行到Action來響應一個請求,而攔截器是在Action之前被呼叫的一個物件(Class)。攔截器就是一個類

攔截器的生命週期

Created with Raphaël 2.2.0瀏覽器請求Tomcat Web容器Struts2的攔截器放行?Action控制器yesno

如何新建一個自定義的攔截器?

  1. 定義一個攔截器的初始化模板
package com.ycxy.config;
public class LoginFilter extends MethodFilterInterceptor{
     
     private
static final long serialVersionUID = 1L; @Override protected String doIntercept(ActionInvocation invocation) throws Exception{ } }

自定義的攔截器如何配置在struts.xml框架主配置檔案裡呢?

  1. 如登入攔截器的實現類如下(範例)
package com.ycxy.config;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.
xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; public class LoginFilter extends MethodFilterInterceptor{ private static final long serialVersionUID = 1L; @Override protected String doIntercept(ActionInvocation invocation)
throws Exception{ //獲取使用者是否登陸 String username = (String)ServletActionContext.getRequest().getSession().getAttribute("CURRENT_LOGIN_USER"); System.out.println("##########interceptor#############"); if(username != null) { //已登陸放行 return invocation.invoke(); } //未登陸跳轉到登陸頁面 return "login"; } }
  1. 攔截器的配置
 <!--攔截器的配置 -->
   <interceptors>  
       <!-- 自定義的攔截器配置 -->
       <interceptor name="LoginFilter" class="com.ycxy.config.LoginFilter"></interceptor>
      
        
        <!-- 配置攔截器的堆疊 -->
        <intercepotr-stack name="setStack">
              <!-- 執行Struts2的預設堆疊 -->
              <interceptor-ref name="defaultStack"></interceptor-ref>
              <interceptor-ref name="loginFilter"></interceptor-ref>
        </intercepotr-stack>
    </interceptors>
  1. 攔截器在Action裡使用的話,也需要配置。如下
 	<interceptor-ref name="LoginFilter"></interceptor-ref>  <!-- 執行自定義攔截器 -->
        <interceptor-ref name="defaultStack"></interceptor-ref>  <!-- 執行struts裡預設的攔截器的堆疊 -->
  1. 全域性返回配置標籤的使用
    <global-results>
         <result name="success">/login.jsp</result> 
    </global-results>