龙空技术网

SpringMVC 处理器映射器详解

发哥微课堂 611

前言:

今天咱们对“映射处理器”大体比较注重,姐妹们都想要了解一些“映射处理器”的相关文章。那么小编同时在网上搜集了一些有关“映射处理器””的相关文章,希望大家能喜欢,小伙伴们一起来了解一下吧!

点击右上角【关注】发哥微课堂头条号,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 配置文件。第二个就是注解配置,在类中做相应的注解即可。

标签: #映射处理器 #处理器适配器和处理器映射器的区别 #处理器适配器和处理器映射器的区别在哪里