定义spring拦截器两种基本方式
1. 实现接口:org.springframework.web.servlet.HandlerInterceptor。
接口中有如下方法需要重写:
注意:参数中的Object handler是下一个拦截器。
a) public boolean preHandle
(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception
该方法在action执行前执行,可以实现对数据的预处理,比如:编码、安全控制等。
如果方法返回true,则继续执行action。
b) public void postHandle
(HttpServletRequest request,HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception
该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。
c) public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
最后执行,通常用于释放资源,处理异常。我们可以根据ex是否为空,来进行相关的异常处理。因为我们在平时处理异常时,都是从底层向上抛出异常,最后到了spring框架从而到了这个方法中。
2. 继承适配器:
org.springframework.web.servlet.handler.HandlerInterceptorAdapter
这个适配器实现了HandlerInterceptor接口。提供了这个接口中所有方法的空实现。
实现如下
在spring-servlet.xml加入
<mvc:interceptors>
<bean class="com.mvc.interceptor.MyInterceptor"></bean>
<mvc:interceptor>
<mvc:mapping path="/student.do" />
<!--<mvc:mapping path="/test/*" />-->
<bean class="com.mvc.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
MyInterceptor.java
package com.mvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
System.out.println("action之前执行===========");
response.sendRedirect("login.jsp");
return false; //继续执行action
}
}