SpringMVC 处理器映射器详解

妖狐艹你老母 2022-05-20 08:27 308阅读 0赞

0x00:介绍

关于 SPring MVC 的详细介绍可参考之前的文章,SpringMVC 工作原理。

在 SpringMVC 中,处理器映射器有两种配置方式,一种是基于 XML 的资源配置,也就是常说的非注解方式。另外一种方式是基于 Annotation 注解方式的配置。

注解是代码里的特殊标记,这些标记可以在程序编译、类加载和运行的时候被读取,然后去执行相应的处理。具体使用哪一种配置方式,要根据程序的具体情况而定。

0x01:非注解的处理器类

1,非注解处理器类 BeanNameUrlHandlerMapping,这个类的映射规则是将 bean 的 name 作为 url 进行查找,需要在配置 Handler 时指定 beanname,其示例代码如下:

  1. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
  2. <bean name="/test.do" class="com.fageweiketang.controller.TestController"/>

这时的 url 地址就会根据 bean 的 name 去查找,也就是示例中配置的 name 的值 test.do,且这个必须以 / 开头。

2,非注解处理器类 SimpleUrlHandlerMapping,它可以通过内部参数去配置请求的 url 和 handler 之间的映射关系,其示例配置如下:

  1. <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  2. <property name="interceptors">
  3. <list>
  4. <ref bean="someCheckInterceptor1"/>
  5. <ref bean="someCheckInterceptor2"/>
  6. </list>
  7. </property>
  8. <property name="mapping">
  9. <props>
  10. <prop key="user.action">userController</prop>
  11. <prop key="product.action">productController</prop>
  12. <prop key="other.action">otherController</prop>
  13. </props>
  14. </property>
  15. </bean>

其中 property 属性可以配置 interceptors 拦截器,也可以配置 mapping(Handler 处理器和 url 的映射关系)。

3,非注解处理器类 ControllerClassNameHandlerMapping,它是将 Controller 控制器的名字作为映射的 url 地址,例如 TestController 控制器则映射的地址就为 / test*,如果是 test 控制器下的 test 方法,则 url 为 test/test.action,示例代码如下:

  1. <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 和实现即可,示例代码如下:

  1. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

第二种是使用 标签来配置,这个标签是一种简写方式,它会自动去注册处理器映射器,配置示例如下:

  1. <mvc:annotation-driven></mvc:annotation-driven>

当使用了注解方式后,就不需要在 xml 配置中配置任何信息了,只需要在作为 Handler 处理器的 Java 类中添加相应的注解即可,示例如下:

  1. //使用Controller来标识它是一个控制器
  2. @Controller
  3. public class TestControllerTest{
  4. @RequestMapping("/testurl")
  5. public ModelAndView testurl() throws Exception{
  6. //逻辑代码
  7. }
  8. }

在以上代码中 @Controller 是注解信息,表示该类是一个控制器类,可以被注解的处理器适配器找到,而 TestControllerTest 类中的 testurl 方法上有一个 @RequestMapping 注解信息,作用是指定一个 url 与该方法绑定。

这时为了让注解的处理器映射器能找到 Handler 控制器,需要在 springmvc.xml 做下配置,方式有两种:

1,在 springmcv.xml 中声明 bean 信息,示例代码如下:

  1. <bean class="com.fageweiketang.controller.TestController"></bean>

第二种是扫描配置,对某一个包下的所有类进行扫描,找出所有使用 @Controller 注解的 Handler 控制器类,示例代码如下:

  1. <context:component-scan base-package="com.fageweiketang.controller"></context:component-scan>

0x03:总结

SpringMVC 中处理器映射器 HandlerMapping 根据配置找到相应的 Handler,返回给前端控制器 DispatcherServlet,这个 Handler 可能包含 N 个 Interceptor 拦截器。

其配置方式有两种,一个是非注解方式配置,也就是基于 xml 配置文件。第二个就是注解配置,在类中做相应的注解即可。


公众号推荐:aFa攻防实验室

  1. **分享关于信息搜集、Web安全、内网安全、代码审计、红蓝对抗、JavaPython等方面的东西。**
  2. ![20191220230427373.jpg][]

发表评论

表情:
评论列表 (有 0 条评论,308人围观)

还没有评论,来说两句吧...

相关阅读