SpringMVC 处理器映射器详解

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 配置文件。第二个就是注解配置,在类中做相应的注解即可。


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

                         分享关于信息搜集、Web安全、内网安全、代码审计、红蓝对抗、Java、Python等方面的东西。

                                                                         

  • 18
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值