前言:
今天咱们对“映射处理器”大体比较注重,姐妹们都想要了解一些“映射处理器”的相关文章。那么小编同时在网上搜集了一些有关“映射处理器””的相关文章,希望大家能喜欢,小伙伴们一起来了解一下吧!点击右上角【关注】发哥微课堂头条号,get更多相关技能~
0x00:介绍
关于 SPring MVC 的详细介绍可参考之前的文章,SpringMVC工作原理
在 SpringMVC 中,处理器映射器有两种配置方式,一种是基于 XML 的资源配置,也就是常说的非注解方式。另外一种方式是基于 Annotation 注解方式的配置。
注解是代码里的特殊标记,这些标记可以在程序编译、类加载和运行的时候被读取,然后去执行相应的处理。具体使用哪一种配置方式,要根据程序的具体情况而定。
0x01:非注解的处理器类
1,非注解处理器类 BeanNameUrlHandlerMapping,这个类的映射规则是将 bean 的 name 作为 url 进行查找,需要在配置 Handler 时指定 beanname,其示例代码如下:
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<bean name="/test.do" class="com.fageweiketang.controller.TestController"/>
这时的 url 地址就会根据 bean 的 name 去查找,也就是示例中配置的 name 的值 test.do,且这个必须以 / 开头。
2,非注解处理器类 SimpleUrlHandlerMapping,它可以通过内部参数去配置请求的 url 和 handler 之间的映射关系,其示例配置如下:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="someCheckInterceptor1"/>
<ref bean="someCheckInterceptor2"/>
</list>
</property>
<property name="mapping">
<props>
<prop key="user.action">userController</prop>
<prop key="product.action">productController</prop>
<prop key="other.action">otherController</prop>
</props>
</property>
</bean>
其中 property 属性可以配置 interceptors 拦截器,也可以配置 mapping(Handler 处理器和 url 的映射关系)。
3,非注解处理器类 ControllerClassNameHandlerMapping,它是将 Controller 控制器的名字作为映射的 url 地址,例如 TestController 控制器则映射的地址就为 / test*,如果是 test 控制器下的 test 方法,则 url 为 test/test.action,示例代码如下:
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
0x02:注解处理器映射器
注解处理方式不需要在 xml 中进行配置,只需要在指定的地方声明一些注解信息即可。SpringMVC3.1 版本之后默认的处理器映射器是 RequestMappingHandlerMapping,位于 SpringMVC 的核心 jar 包 org.springframework.web.servlet.mvc.method.annotation 中。
注解配置方式有两种,第一种是在 springmvc.xml 中配置,声明相关的 bean 和实现即可,示例代码如下:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
第二种是使用 <mvc:annotation-driven/> 标签来配置,这个标签是一种简写方式,它会自动去注册处理器映射器,配置示例如下:
<mvc:annotation-driven></mvc:annotation-driven>
当使用了注解方式后,就不需要在 xml 配置中配置任何信息了,只需要在作为 Handler 处理器的 Java 类中添加相应的注解即可,示例如下:
//使用Controller来标识它是一个控制器
@Controller
public class TestControllerTest{
@RequestMapping("/testurl")
public ModelAndView testurl() throws Exception{
//逻辑代码
}
}
在以上代码中 @Controller 是注解信息,表示该类是一个控制器类,可以被注解的处理器适配器找到,而 TestControllerTest 类中的 testurl 方法上有一个 @RequestMapping 注解信息,作用是指定一个 url 与该方法绑定。
这时为了让注解的处理器映射器能找到 Handler 控制器,需要在 springmvc.xml 做下配置,方式有两种:
1,在 springmcv.xml 中声明 bean 信息,示例代码如下:
<bean class="com.fageweiketang.controller.TestController"></bean>
第二种是扫描配置,对某一个包下的所有类进行扫描,找出所有使用 @Controller 注解的 Handler 控制器类,示例代码如下:
<context:component-scan base-package="com.fageweiketang.controller"></context:component-scan>
0x03:总结
SpringMVC 中处理器映射器 HandlerMapping 根据配置找到相应的 Handler,返回给前端控制器 DispatcherServlet,这个 Handler 可能包含 N 个 Interceptor 拦截器。
其配置方式有两种,一个是非注解方式配置,也就是基于 xml 配置文件。第二个就是注解配置,在类中做相应的注解即可。