在以前的Spring版本中,用户需要在Web应用程序上下文中定义一个或多个HandlerMapping bean,以将传入的Web请求映射到适当的处理器。通过引入带注解的控制器,就不需要像之前那样定义了,因为RequestMappingHandlerMapping会自动在所有@Controller bean上查找@RequestMapping注解。但是,请记住,从AbstractHandlerMapping扩展的所有HandlerMapping类都具有以下可用于自定义其行为的属性:
  
  拦截器:使用的拦截器列表
  
  defaultHandler:当此处理器映射未找到匹配的处理器时使用的默认处理器。
  
  order:基于order属性的值(参考org.springframework.core.Ordered接口),Spring对上下文中可用的所有处理程序映射进行排序,并应用第一个匹配的处理器。
  
  alwaysUseFullPath:如果为true,则Spring使用当前Servlet上下文中的完整路径来查找适当的处理器序。如果为false(默认值),则使用当前Servlet映射中的路径。例如,如果使用 /testing/* 映射Servlet并且将alwaysUseFullPath属性设置为true,则使用 /testing/viewPage.html,而如果该属性设置为false,则使用/viewPage.html。
  
  urlDecode:从Spring 2.5开始,默认为true。如果希望比较编码路径,将此标志设置为false。但是,HttpServletRequest始终以解码形式暴露Servlet路径。请注意,Servlet路径与编码路径相比是不匹配的。
  
  以下示例显示如何配置拦截器:
  
  <beans>
  
  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
  
  <property name="interceptors">
  
  <bean class="example.MyInterceptor"/>
  
  </property>
  
  </bean>
  
  <beans>
  
  1. 使用HandlerInterceptor拦截请求
  
  Spring的处理器映射机制包括处理器拦截器,当想要将特定功能应用于某些请求(例如,检查认证信息)时,它们很有用。
  
  位于处理器映射中的拦截器必须从org.springframework.web.servlet.HandlerInterceptor。该接口定义了三种方法,这三种方法应该提供足够的灵活性来进行各种预处理和后处理,方法如下:
  
  在执行实际处理程序之前调用preHandle(..)
  
  执行处理程序后调用postHandle(..)
  
  完成请求完成后调用afterCompletion(..)
  
  preHandle(..)方法返回一个布尔值。可以使用此方法来中断或继续执行链的处理。当此方法返回true时,处理程序执行链将继续;当它返回false时,DispatcherServlet假定拦截器本身已处理请求(例如,呈现了适当的视图),并且不继续执行执行链中的其他拦截器和实际处理器。
  
  可以使用interceptors属性配置拦截器,该属性存在于从AbstractHandlerMapping扩展的所有HandlerMapping类中。示例:
  
  <beans>
  
  <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
  
  <property name="interceptors"www.hjshidpt.com>
  
  <list>
  
  <ref bean=www.yigouyule2.cn"officeHoursInterceptor"/>
  
  </list>
  
  </property>
  
  </bean>
  
  <bean id="officeHoursInterceptor" class="www".michenggw.com"samples.TimeBasedAccessInterceptor">
  
  <property name="openingTime"www.gcyl152.com value="www.gcyl159.com 9"/>
  
  <property name="closingTime" value="18"/>
  
  </bean>
  
  </beans>
  
  TimeBasedAccessInterceptor拦截此映射处理的任何请求。如果当前时间不在办公时间,则会将用户重定向到静态HTML文件,例如,只能在办公时间访问该网站。
  
  package samples;
  
  public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter {
  
  private int openingTime;
  
  private int closingTime;
  
  public void setOpeningTime(int openingTime) {
  
  this.openingTime = openingTime;
  
  }
  
  public void setClosingTime(int www.mcyllpt.com closingTime) {
  
  this.closingTime = closingTime;
  
  }
  
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
  
  Object handler)www.furggw.com throws Exception {
  
  Calendar cal = Calendar.getInstance();
  
  int hour = cal.get(HOUR_OF_DAY);
  
  if (openingTime <= hour && hour < closingTime) {
  
  return true;
  
  }
  
  response.sendRedirect("http://host.com/outsideOfficeHours.html");
  
  return false;
  
  }
  
  }
  
  注:使用RequestMappingHandlerMapping时,实际的处理器是HandlerMethod的一个实例,它标识将被调用的特定控制器方法。
  
  如上例,Spring适配器类HandlerInterceptorAdapter使扩展HandlerInterceptor接口变得更容易。
  
  提示:在上面的示例中,配置的拦截器将应用于使用带注解的控制器方法处理的所有请求。如果要缩小拦截器应用的URL路径,可以使用MVC命名空间或MVC Java配置,或者声明类型为MappedInterceptor的bean实例来执行此操作。
  
  请注意,HandlerInterceptor的postHandle方法并不总是非常适合与@ResponseBody和ResponseEntity方法一起使用。在这种情况下,HttpMessageConverter在调用postHandle之前写入并提交响应,这使得无法更改响应,例如添加响应头。相反,应用程序可以实现ResponseBodyAdvice并将其声明为@ControllerAdvice bean或直接在RequestMappingHandlerAdapter上配置它。

SpringMVC(8) - 处理器映射的更多相关文章

  1. springMVC入门(三)------springMVC的处理器映射器和处理器适配器配置

    简介 springMVC的处理器映射器和处理器适配器存在多种配置,因此在此专门做一个总结 常见处理器映射器.适配器的配置 springmvc多个映射器多个处理器可以并存 所有的映射器都实现了Handl ...

  2. SSM-SpringMVC-07:SpringMVC中处理器映射器

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping BeanN ...

  3. SpringMVC handleMapping 处理器映射器 属性清单

    映射器的属性清单 defaultHandler         在映射与所有处理器都不匹配的情况下,指定默认的处理器(处理器即你定义的Controller(action)类) order        ...

  4. SpringMVC处理器映射器和方法名称解析器

    所谓配置式开发是指,“处理器类是程序员手工定义的,实现了特定接口的类,然后再在SpringMVC配置文件中对该类进行显式的,明确的注册”的开发方式” 1.处理器映射器HandlerMapping Ha ...

  5. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  6. 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)

    上一篇我们讲解了DispatcherServlet的url-pattern配置详解,今天我们来真正对SpringMVC进行配置式开发.所谓配置式开发是指“处理器类是程序员自己定义的.实现了特定接口的类 ...

  7. SpringMVC的HandlerMapping(处理器映射器)

    SpringMvc有四种HandlerMapping:BeanNameUrlHandlerMapping ,SimpleUrlHandlerMapping,ControllerClassNameHan ...

  8. springMVC非注解常用的"处理器映射器"、"适配器"、"处理器"

    非注解处理器映射器1. org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping url 到bean name的映射2. or ...

  9. SpringMVC由浅入深day01_5注解的处理器映射器和适配器

    5 注解的处理器映射器和适配器 在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandle ...

  10. 【SpringMVC笔记】第四课 注解的处理器映射器和处理器适配器使用

    一.注意点: 版本问题 spring3.2以前的版本,注解的映射器和适配器使用以下两个类. org.springframework.web.servlet.mvc.annotation.Default ...

随机推荐

  1. 用户名密码登录小程序及input与raw_input区别。

    一.此次程序需要实现: 1.设定固定的用户名密码 2.用户名密码输入正确打印登录正确信息 3.仅仅运行三次登录 二.本次使用的python版本为: Windows下版本号: C:\Users\dais ...

  2. idea DeBug调试学习

    在Intellij IDEA中使用Debug 目录 一.Debug开篇 二.基本用法&快捷键 三.变量查看 四.计算表达式 五.智能步入 六.断点条件设置 七.多线程调试 八.回退断点 九.中 ...

  3. [ AHOI 2013 ] 作业 & [ BZOJ 3809 ] Gty的二逼妹子序列

    \(\\\) Description 给出一个长为 \(n\) 的数列 \(A\) 和 \(k\),多次询问: 对于一个区间 \([L_i,R_i]\),问区间内有多少个数在 \([a_i,b_i]\ ...

  4. yum install perl-ExtUtils-MakeMaker

    Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/per ...

  5. ssm框架搭建(下) 简单案例

    前言 这段时间没有更新博客,一直想做一个基于ssm的简单的项目.经过多次的尝试,终于实现了简单的增删查改功能了. 正文 由于前端的技术不是很熟悉,经过多方的查阅,使用了bootstrap的样式,来使界 ...

  6. innerHTML的性能问题

    看到一遍文章When innerHTML isn’t Fast Enough,反应了innerHTML在操作量大了以后的性能下降的问题. 并且给出了一个replaceHTML的函数 function  ...

  7. [python3]PyCharm编辑器

    简介 Python有丰富的开发工具,本教程不一一进行介绍,只推荐大家使用PyCharm,因为python开发者都在用它,但缺点就是消耗电脑资源,如果你电脑配置低,就会比较卡 下载 下载地址: http ...

  8. PHP一句话后门过狗姿势万千之后门构造与隐藏

    第二章节主要带给大家一些后门构造思路,与安全狗文件特征检测的机制. 另外强调一下,这篇文章需要大家对于php有一定的认识. 本章节分为三大部分,第一部分针对初级,分析菜刀php代码的执行过程,较基础: ...

  9. swift Equatable 函数签名的测试

    struct Degoo:Equatable { var lex:String var pex:String static func == (left:Degoo, right:Degoo) -> ...

  10. nginx 安全配置文档

    1.配置文档中有多处明确写出了nginx的配置文件路径,该路径是测试环境中的路径,线上系统的nginx配置文件与文档中所写的路径可能不一样,在进行相关配置时,应以线上配置文件的实际路径为准. 线上系统 ...