接:http://alog2012.iteye.com/admin/blogs/2040477
Spring为我们提供了:
org.springframework.web.servlet.HandlerInterceptor接口,
org.springframework.web.servlet.handler.HandlerInterceptorAdapter适配器,
实现这个接口或继承此类,可以非常方便的实现自己的拦截器。
有以下三个方法:
Action之前执行:
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler);
生成视图之前执行
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView);
最后执行,可用于释放资源
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面)
在preHandle中,可以进行编码、权限控制等处理;
在postHandle中,有机会修改ModelAndView;
在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。
参数中的Object handler是下一个拦截器。
下面是一个自定义的拦截器,实现了 HandlerInterceptor 。
public class MyIntercepor implements HandlerInterceptor { /** * 执行时机:视图已经被解析完毕,类似try catch 后的finally */ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception ex) throws Exception { System.out.println("afterCompletion..."); ex.printStackTrace(); System.out.println("================"); } /** * 执行时机:controller执行完,视图解析器没有把视图解析成页面, 对视图做统一的修改,主要体现在Model上 */ @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView mv) throws Exception { System.out.println("postHandler..."); Map<String, Object> map = mv.getModel(); map.put("test", "append something"); } /** * 执行时机:在执行controller之前来执行 * 返回值类型:boolean * true:代表放行可以访问controller, * false:不可以访问controller */ @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("preHander..."); return true; } }
Spring MVC并没有总的拦截器,不能对所有的请求进行前后拦截。
Spring MVC的拦截器,是属于HandlerMapping级别的,可以有多个HandlerMapping ,每个HandlerMapping可以有自己的拦截器。
当一个请求按Order值从小到大,顺序执行HandlerMapping接口的实现类时,哪一个先有返回,那就可以结束了,后面的HandlerMapping就不走了,本道工序就完成了。就转到下一道工序了。
拦截器会在什么时候执行呢? 一个请求交给一个HandlerMapping时,这个HandlerMapping先找有没有处理器来处理这个请求,如何找到了,就执行拦截器,执行完拦截后,交给目标处理器。
如果没有找到处理器,那么这个拦截器就不会被执行。
在spring MVC的配置文件中配置有三种方法:
方案一,(近似)总拦截器,拦截所有url
<mvc:interceptors> <mvc:interceptor> <!-- 某一模块的拦截:/{命名空间}/{RequestMapping}[**]; 拦截所有的请求/** --> <mvc:mapping path="/**" /> <bean class="org.study1.mvc.interceptor.MyIntercepor"></bean> </mvc:interceptor> </mvc:interceptors>
为什么叫“近似”,前面说了,Spring没有总的拦截器。
<mvc:interceptors/>会为每一个HandlerMapping,注入一个拦截器。总有一个HandlerMapping是可以找到处理器的,最多也只找到一个处理器,所以这个拦截器总会被执行的。起到了总拦截器的作用。
如果是REST风格的URL,静态资源也会被拦截。
方案二, HandlerMappint上的拦截器。
如果是REST风格的URL,静态资源就不会被拦截。因为我们精准的注入了拦截器。
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <bean class="org.study1.mvc.interceptor.MyIntercepor"></bean> </list> </property> </bean>
如果使用了<mvc:annotation-driven />, 它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 这两个bean,所以就没有机会再给它注入interceptors属性,就无法指定拦截器。
当然我们可以通过人工配置上面的两个Bean,不使用 <mvc:annotation-driven />,就可以 给interceptors属性 注入拦截器了。
更加详细的参见:http://elf8848.iteye.com/blog/875830/ “十九”
相关推荐
**SpringMVC快速入门基础代码详解** SpringMVC是Spring框架的一个模块,专门用于构建Web应用程序。...随着对SpringMVC的深入学习,你将能够利用更多的特性,如拦截器、国际化、异常处理、AOP等,构建更复杂的Web应用。
了解了这些基础知识后,你可以通过运行这个入门实例,逐步学习如何配置拦截器,编写拦截器逻辑,并将其与控制器结合使用。在实践中,你会更深入地理解 SpringMVC 框架如何通过拦截器提高应用程序的可扩展性和灵活性...
2. **处理流程**:SpringMVC采用了更轻量级的前端控制器设计,而Struts2采用拦截器链。 3. **学习曲线**:SpringMVC的学习曲线相对较平缓,因为它更依赖于现有的Java编程经验;而Struts2有一套较为复杂的概念体系。 ...
Spring MVC 是一个强大的Java Web...随着对框架更深入的理解,可以逐渐引入更复杂的功能,如拦截器、数据验证、异常处理、国际化等。Spring MVC的强大之处在于它的灵活性和可扩展性,能够适应各种规模的Web项目需求。
SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模型。...在实际项目中,你还可以利用SpringMVC的注解驱动特性、拦截器、异常处理、数据绑定等功能,构建更加复杂和灵活的Web应用。
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用来处理 Web ...随着经验的增长,你还可以探索更多的特性,如拦截器(Interceptor)、异常处理、国际化支持、RESTful API 设计等。
8. **Interceptor**:拦截器允许在请求被处理之前和之后执行额外的逻辑,比如权限检查、日志记录等。 在"springmvc入门简单实现"这个主题中,你可以按照以下步骤进行学习: 1. **环境搭建**:首先确保安装了Java和...
7. **AOP(面向切面编程)**:SpringMVC利用Spring的AOP功能,可以实现如日志记录、权限验证等功能的拦截器(Interceptor)。 8. **MVC注解驱动**:Spring 3.0引入了注解驱动的开发模式,使得开发者无需编写大量的...
**SpringMVC 入门最简洁工程** SpringMVC 是 Spring 框架的一个模块,专为构建基于Java的企业级Web应用...随着经验的增长,你还可以探索更多高级特性,如拦截器、数据绑定、异常处理等,进一步提升你的SpringMVC技能。
10. **拦截器(Interceptor)**:SpringMVC支持拦截器,可以在请求处理前后执行自定义逻辑,例如登录检查、日志记录等。 以上就是SpringMVC入门中的表单处理相关知识点。通过这些基础,开发者可以轻松地构建表单...
这个名为"一个简单的springMVC入门项目"的压缩包文件可能是为了帮助初学者了解和掌握SpringMVC的基本概念和操作流程。让我们深入探讨一下SpringMVC的核心组件和关键功能。 1. **DispatcherServlet**:作为SpringMVC...
你可以在这里声明Controller beans,配置拦截器,以及设置视图解析器的属性。 4. **@Controller注解** `@Controller`是SpringMVC中的核心注解,用于标记处理HTTP请求的类。例如,你可能有一个名为`HelloController...
在“SpringMVC学习(一)——SpringMVC入门小程序”中,我们首先会接触到SpringMVC的基本概念。这通常包括以下几个核心组件: 1. **DispatcherServlet**:这是SpringMVC的前端控制器,负责接收HTTP请求,并根据配置...
通过这个快速入门教程,你可以掌握 SpringMVC 的基本使用方法,为进一步深入学习和开发基于 SpringMVC 的 Web 应用打下坚实的基础。在实践中,你可以尝试集成其他 Spring 模块,如 Spring Security(安全控制)、...
Spring MVC 是一款强大的Java Web应用...在实际开发中,你还可以学习更多高级特性,如拦截器、异常处理、数据验证、AOP(面向切面编程)等。随着经验的增长,你将能熟练运用Spring MVC构建大型、高性能的企业级应用。
**Spring MVC 入门实例详解** Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,是 ...随着对 Spring MVC 的深入学习,你将掌握更多高级特性,如拦截器、AOP、数据绑定、国际化等,实现更复杂的业务逻辑。
- 拦截器可以对请求和响应进行预处理和后处理,例如登录检查、日志记录等。 10. **异常处理** - 可以通过 `@ExceptionHandler` 注解自定义异常处理,提供统一的错误页面。 11. **视图解析器(ViewResolver)** ...
12. **拦截器**:Spring MVC允许添加自定义拦截器,对请求进行预处理和后处理,比如登录检查、权限验证等。 13. **测试**:Spring MVC提供了MockMVC工具,方便进行单元测试和集成测试,模拟HTTP请求并验证...
此外,Spring MVC还支持数据绑定、异常处理、拦截器、国际化等功能,使得开发复杂Web应用变得更为便捷。通过深入学习和实践这个入门实例,你将能够更好地理解和运用Spring MVC框架,为构建高效、可维护的Java Web...
**SpringMVC 入门与框架搭建** SpringMVC 是 Spring 框架...随着对 SpringMVC 的深入学习,你可以了解到更多高级特性,如拦截器、异常处理、数据绑定、AOP 集成等,这些都能帮助你构建更高效、更健壮的 Web 应用程序。