SpringMVC(8) - 处理器映射
在以前的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) - 处理器映射的更多相关文章
- springMVC入门(三)------springMVC的处理器映射器和处理器适配器配置
简介 springMVC的处理器映射器和处理器适配器存在多种配置,因此在此专门做一个总结 常见处理器映射器.适配器的配置 springmvc多个映射器多个处理器可以并存 所有的映射器都实现了Handl ...
- SSM-SpringMVC-07:SpringMVC中处理器映射器
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping BeanN ...
- SpringMVC handleMapping 处理器映射器 属性清单
映射器的属性清单 defaultHandler 在映射与所有处理器都不匹配的情况下,指定默认的处理器(处理器即你定义的Controller(action)类) order ...
- SpringMVC处理器映射器和方法名称解析器
所谓配置式开发是指,“处理器类是程序员手工定义的,实现了特定接口的类,然后再在SpringMVC配置文件中对该类进行显式的,明确的注册”的开发方式” 1.处理器映射器HandlerMapping Ha ...
- SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)
SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...
- 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)
上一篇我们讲解了DispatcherServlet的url-pattern配置详解,今天我们来真正对SpringMVC进行配置式开发.所谓配置式开发是指“处理器类是程序员自己定义的.实现了特定接口的类 ...
- SpringMVC的HandlerMapping(处理器映射器)
SpringMvc有四种HandlerMapping:BeanNameUrlHandlerMapping ,SimpleUrlHandlerMapping,ControllerClassNameHan ...
- springMVC非注解常用的"处理器映射器"、"适配器"、"处理器"
非注解处理器映射器1. org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping url 到bean name的映射2. or ...
- SpringMVC由浅入深day01_5注解的处理器映射器和适配器
5 注解的处理器映射器和适配器 在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandle ...
- 【SpringMVC笔记】第四课 注解的处理器映射器和处理器适配器使用
一.注意点: 版本问题 spring3.2以前的版本,注解的映射器和适配器使用以下两个类. org.springframework.web.servlet.mvc.annotation.Default ...
随机推荐
- Aria's Loops
https://www.hackerrank.com/contests/101hack41/challenges/arias-loops 可以看我以前的笔记,http://www.cnblogs.co ...
- AJPFX对选择和冒泡两种排序的理解
冒泡排序和直接选择排序都是排序中比较简单和容易实现的算法,先简单说说两者的区别:先以按照元素从小到大为:冒泡排序:将相邻元素两两比较,如果有比较大的,就把比较大的放在右边,这样的结果就是一轮排序完毕后 ...
- 解决IDEA Tomcat控制台乱码问题
1.在Tomcat Server的配置中添加一句命令: 神秘代码: -Dfile.encoding=UTF-8 重启Tomcat,ok. 如果还不行,则需要: 1.在Settings中修改文件编码 2 ...
- 设计 REST API 的13个最佳实践
写在前面 之所以翻译这篇文章,是因为自从成为一名前端码农之后,调接口这件事情就成为了家常便饭,并且,还伴随着无数的争论与无奈.编写友好的 restful api 不论对于你的同事,还是将来作为第三方服 ...
- VCS filelist 文件格式
VCS在运行仿真一般都会加仿真参数 –f filelist,filelist 是包含其他的仿真参数和整个工程的文件列表.具体格式如下: //file list format, just for exa ...
- android和IOS长连接区别
http://blog.csdn.net/zhangzeyuaaa/article/details/39028369 首先我们必须知道,所有的推送功能必须有一个客户端和服务器的长连接,因为推送是由服务 ...
- Java数据结构和算法(四)--链表
日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...
- 最短路 || HDU 2066 一个人的旅行
本草的旅行故事(✺ω✺),可以从S个点中的任意一个开始,到达D个点中的任意一个,求最短路 *解法:把草儿的家记成点0,S个点与0的距离为0,然后spfa求最短路 又是改了一万次,①多组数据啊 ②改完多 ...
- centos7下LVM挂载和扩容
说明:此操作在centos7下进行,如果是centos6发行版,需要注意格式化LV的文件系统类型(centos7.0开始默认文件系统是xfs,centos6是ext4).最后一步写入系统的类型,其中文 ...
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...