一、HandleMapping:处理器映射
1.作用:找到请求和处理函数之间的映射关系
2.几种HandleMapping介绍:
1.非注解的HandleMapping
Spring2.5之前不支持注解处理器,所有处理器均实现接口重写方法,这一阶段使用如下三种HandleMapping,均实现org.springframework.web.servlet.HandleMapping接口:
1.BeanNameUrlHandleMapping:
DispatcherServlet默认的HandleMapping;会交给与url名字相同的控制器bean去处理该请求;
2.SimpleUrlHandleMapping:
直接将URL映射到控制器,必须显示定义该HandleMapping:
<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handle.SimpleUrlHandlerMapping">
<property name="mappings">
/*props中定义映射关系*/
<props>
/*prop key属性写url 标签间写映射的控制器bean*/
<prop key="/listCourses.go">listCoursesController</prop>
<prop key="/login.go">loginController</prop>
</props>
</property>
</bean>
3.ControllerClassNameMapping:
通过控制器的类名进行映射,访问时类名首字母需要小写。需要加入.do 如请求为Skr.do 则交给类名为Skr的控制器控制;
2.基于注解的HandleMapping
spring2.5之后,支持使用注解控制器,在配置文件中使用注解驱动标签:<mvc:annotation-drivern>标签可自动注册注解映射器和注解适配器:
二、HandleAdapter:处理器适配
1.作用:Spring MVC 通过HandlerAdapter来实际调用处理函数。
举例:
AnnotationMethodHandlerAdapter:DispatcherServlet中根据handlermapping找到对应的handler method后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。通过调用handlerAdapter中的handle方法来处理及准备handler method中的参数及annotation(这就是spring mvc如何将reqeust中的参数变成handle method中的输入参数的地方),最终调用实际的handle method。