SpringMVC基于注解开发中静态资源的处理

在开发中,我们一般会在配置文件中加入<mvc:annotation-driven />和<mvc:default-servlet-handler />。

  • 在两者都未加入时,我们也可以进行注解的方式进行开发,但是就会存在静态资源无法访问的问题。
  • 在只加入<mvc:default-servlet-handler />时,虽然静态资源能够访问了,但是基于注解开发却无法使用了。
  • 在只加入<mvc:annotation-driven />时,却恰恰相反,能够基于注解开发却无法访问静态资源。
  • 在两者都加入时,便同时能够使用注解开发和访问静态资源。

接下来就探讨其中的缘由。

我们知道,在SpringMVC的执行流程中,SpringMVC会把请求交给HandlerMapping处理,由HandlerMapping返回一个HandlerExecutionChain。HandlerExecutionChain不直接调用Handler,而是通过HandlerAdapter去执行Handler。
所以,能否使用注解开发或访问静态资源,就取决于Spring中是否有对应的HandlerMapping和HandlerAdapter。

  • SpringMVC在处理静态资源时,使用SimpleUrlHandlerMapping映射器处理器和HttpRequestHandlerAdapter处理器设配器,对应的处理器是DefultServletHttpRequestHandler。
  • 使用注解方式开发时,使用RequestMappingHandlerMapping映射器处理器和RequestMappingrHandlerAdapter处理器设配器,对应的处理器则是使用@RequestMapping标识的方法。
  1. 当<mvc:annotation-driven />和<mvc:default-servlet-handler />都不加时:SpringMVC默认装配了下列HandlerMapping和HandlerAdapter:
    HandlerMapping
    BeanNameUrlHandlerMapping是基于配置文件开发的映射器处理器
    在这里插入图片描述
    SimpleControllerHandlerAdapter是基于配置文件开发的处理器适配器
    在两者都不加是,SpringMVC装配了RequestMappingHandlerMapping和RequestMappingrHandlerAdapter,所以能使用注解开发,但在访问静态资源是,缺少SimpleUrlHandlerMapping处理器映射器,因此无法处理访问静态资源的请求。
  2. 当只加入<mvc:default-servlet-handler />时,SpringMVC装配了下列HandlerMapping和HandlerAdapter:
    在这里插入图片描述
    在这里插入图片描述

在只加<mvc:default-servlet-handler />的情况下,SpringMVC装配了SimpleUrlHandlerMapping和HttpRequestHandlerAdapter,因此能完成对静态资源的请求,但是缺少RequestMappingHandlerMapping处理器映射器和RequestMappingrHandlerAdapter处理器适配器,SpringMVC无法找到使用@RequestMapping表示的方法。
3. 当只加入<mvc:annotation-driven />时,SpringMVC装配了下列HandlerMapping和HandlerAdapter:
在这里插入图片描述
在这里插入图片描述
在只加<mvc:annotation-driven />的情况下,SpringMVC装配了RequestMappingHandlerMapping和RequestMappingrHandlerAdapter,所以能使用注解开发,但是缺少SimpleUrlHandlerMapping处理器映射器,SpringMVC无法处理访问静态资源的请求。
4. 当<mvc:annotation-driven />和<mvc:default-servlet-handler />都加时:SpringMVC装配了下列HandlerMapping和HandlerAdapter:
在这里插入图片描述
在这里插入图片描述
在<mvc:annotation-driven />和<mvc:default-servlet-handler />都加入的情况下,SpringMVC装配了RequestMappingHandlerMapping和RequestMappingrHandlerAdapter与SimpleUrlHandlerMapping和HttpRequestHandlerAdapter,所以能使用注解开发,也能处理访问静态资源的请求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值