Struts2中的拦截器使用方法
拦截器的介绍
什么是拦截器?
当一个请求到服务端首先在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>