定义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
}
}
本文详细介绍了Spring拦截器的两种基本实现方式:通过接口`org.springframework.web.servlet.HandlerInterceptor`直接实现,以及通过继承其适配器类`HandlerInterceptorAdapter`来简化实现过程。重点阐述了三个关键方法`preHandle`、`postHandle`和`afterCompletion`的作用及应用场景,特别强调了在`preHandle`方法中如何进行数据预处理和安全控制,以及在`postHandle`和`afterCompletion`方法中如何对视图层数据进行修改和资源释放。
800

被折叠的 条评论
为什么被折叠?



