SpringMVC入门学习(十)----mvc:annotation-driven标签介绍

目录


回到顶部

1、关于mvc:annotation-driven作用

1、<mvc:annotation-driven /> 会自动向容器中注册如下组件,并且会代替之前默认的组件:

  • HandlerMapping :请求映射,负责根据用户请求url找到要执行的Handler
    • RequestMappingHandlerMapping:支持@RequestMapping注解
    • BeanNameUrlHandlerMapping:将controller类的名字映射为请求url
  • HandlerAdapter : 处理器适配器,用于请求处理,通过HandlerAdapter对处理器进行执行
    • RequestMappingHandlerAdapter:处理@Controller和@RequestMapping注解的处理器
    • HttpRequestHandlerAdapter:处理继承了HttpRequestHandler创建的处理器
    • SimpleControllerHandlerAdapter:处理继承自Controller接口的处理器
  • ExceptionResolver:处理异常的解析器
    • ExceptionHandlerExceptionResolver
    • ResponseStatusExceptionResolver
    • DefaultHandlerExceptionResolver

<mvc:annotation-driven /> 最主要的作用是配置两个最常用的组件RequestMappingHandlerMapping和RequestMappingHandlerAdapter。

  • RequestMappingHandlerMapping是HandlerMapping的实现类,它会在容器启动的时候,扫描容器内的bean,解析带有@RequestMapping注解的方法,并将其解析为url和handlerMethod键值对方式注册到请求映射表中。
  • RequestMappingHandlerAdapter是HandlerAdapter的实现类,它是处理请求的适配器,说白了,就是确定调用哪个类的哪个方法,并且构造方法参数,返回值。

<mvc:annotation-driven/>是告知Spring容器,我们启用注解驱动,支持@RequestMapping注解,这样我们就可以使用@RequestMapping来配置处理器。

<context:component-scan/>标签是告诉Spring容器来扫描指定包下的类,并注册被@Component,@Controller,@Service,@Repository等注解标记的组件相似。

② 还将提供以下支持:

  • 支持使用 ConversionService 实例对表单参数进行类型转换
  • 支持使用 @NumberFormat、@DateTimeFormat 注解完成数据类型的格式化
  • 支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
  • 支持使用 @RequestBody 和 @ResponseBody 注解

回到顶部

2、mvc:annotation-driven在什么时候必须配置

1、直接配置响应的页面:无需经过控制器来执行结果 ;但会导致其他请求路径失效,需要配置mvc:annotation-driven标签

<mvc:view-controller path="/success" view-name="success"/>

2、RESTful-CRUD操作,删除时,通过jQuery执行delete请求时,找不到静态资源,需要配置mvc:annotation-driven标签

<mvc:default-servlet-handler /> 将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet 的请求进行筛查,如果发现是没有经过映射的请求,就将该请求交由 WEB 应用服务器默认的 Servlet 处理,如果不是静态资源的请求,才由 DispatcherServlet 继续处理。

3、配置类型转换器服务时,需要指定转换器服务引用

<mvc:annotation-driven conversion-service="conversionService"/> 会将自定义的 ConversionService 注册到 Spring MVC 的上下文中

4、后面完成JSR 303数据验证,也需要配置

回到顶部

3、关于mvc:annotation-driven配合使用的几种情况

1、既没有配置 <mvc:default-servlet-handler /> 也没有配置 <mvc:annotation-driven />

结果:动态资源像@RequestMapping映射的资源能访问,静态资源(.html,.js,.img)不能访问

这里用到的是默认的注解请求映射------DefaultAnnotationHandlerMapping,它里面有一个handlerMap里面包含了映射,所以动态的能访问。静态不能访问,就是因为里面没有保存静态资源映射。

2、配置了 <mvc:default-servlet-handler /> 但没有配置 <mvc:annotation-driven />

结果:可以加载静态资源,动态资源不行。

可以发现DefaultAnnotationHandlerMapping没有了,所以不能存储那些请求信息了。

3、既配置了<mvc:default-servlet-handler /> 又配置 <mvc:annotation-driven />

结果:动态资源和静态资源都能访问

参考链接:

来源:SpringMVC入门学习(十)----mvc:annotation-driven标签介绍 - 唐浩荣 - 博客园 (cnblogs.com)

相关推荐
秋天的怀念_David7 分钟前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas10020 分钟前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin1 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质1 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
apple-mapping1 小时前
网络RTK定位学习总结
学习·网络rtk
captain3762 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02142 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
楚山之石2 小时前
【Lancet Neurology 】多发性硬化认知障碍的 SDMT 筛查、灰质萎缩标志与认知康复循证路径
图像处理·人工智能·学习·mri
步行cgn3 小时前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
lgcgkCQ3 小时前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j