Struts2中的攔截器使用方法
阿新 • • 發佈:2018-12-18
攔截器的介紹
什麼是攔截器?
當一個請求到服務端首先在MVC模式下會執行到Action來響應一個請求,而攔截器是在Action之前被呼叫的一個物件(Class)。攔截器就是一個類
攔截器的生命週期
如何新建一個自定義的攔截器?
- 定義一個攔截器的初始化模板
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框架主配置檔案裡呢?
- 如登入攔截器的實現類如下(範例)
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";
}
}
- 攔截器的配置
<!--攔截器的配置 -->
<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>
- 攔截器在Action裡使用的話,也需要配置。如下
<interceptor-ref name="LoginFilter"></interceptor-ref> <!-- 執行自定義攔截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref> <!-- 執行struts裡預設的攔截器的堆疊 -->
- 全域性返回配置標籤的使用
<global-results>
<result name="success">/login.jsp</result>
</global-results>