SpringMVC 处理器适配器详解

  • 1.介绍
  • 2.非注解处理器适配器
  • 3.注解处理器适配器
  • 4.总结

1.介绍

处理器适配器 HandlerAdapter:作用是根据映射器找到的处理器 Handler 信息,按照特定的规则去执行相关的处理器 Handler。

其配置方式有两种,一种是基于 xml 的资源配置,也就是非注解的配置方式。另外一种就是基于 Annotation 注解的配置。其注解在代码中做上特殊标记,这些标记就可以编译、类加载、运行时被读取,然后去执行相应的处理。

2.非注解处理器适配器

1,第一个是 SimpleControllerHandlerAdapter,翻译过来就是简单的控制器处理器适配器,它支持所有实现了 Controller 接口的 Handler 控制器,如果开发中编写了实现 Controller 接口的控制器,则 SimpleControllerHandlerAdapter 适配器就会去执行 Controller 的具体方法。其配置示例如下:

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

2,第二个是 HttpRequestHandlerAdapter,翻译过来就是 http 请求处理器适配器,它要求编写的 Handler 需要实现 HttpRequestHandler 接口。使用这种 Handler 的开发方式,方便开发者获取 request 的相关 http 请求信息,以及设置返回对象 response 的一些参数。其配置示例如下:

<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

然后在之前的处理器映射器配置中添加这个 Handler 的 url 映射信息,其示例代码如下:

  1. <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  2. <property name="mapping">
  3. <props>
  4. <prop key="/test1.action">testController1</prop>
  5. <prop key="/test2.action">testController2</prop>
  6. </props>
  7. </property>
  8. </bean>
  9. <bean id="testController1" class="com.fageweiketang.controller.TestController1"/>
  10. <bean id="testController2" class="com.fageweiketang.controller.TestController2"/>

处理器映射器就是根据 url 来查找 Handler,处理器适配器就是按照它要求的规则去执行 Handler,但是一个 Handler 类中只能编写一个方法,这个弊端就可以通过注解的方式来解决。

3.注解处理器适配器

注解处理器适配器,只需要在指定的地方声明一些注解信息即可。在 spring3.1 之后,springmvc 新的基于注解的适配器默认是 RequestMappingHandlerAdapter,它位于 springmvc 核心 jar 包 org.springframework.web.servlet.mvc.method.annotation
包下。

其第一种方式是在 springmvc.xml 中声明 bean 和实现方式即可,示例代码如下:

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

第二种方式是使用 <mvc:annotation-driven/> 标签来配置,它是一种简写模式,它会自动注册处理器适配器,配置方式如下:

<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 信息,示例代码如下:

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

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

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

可以发现,上面这段和之前的处理器映射器一样,其配置通用。

4.总结

SpringMVC 中处理器映射器 HandlerMapping 根据配置找到相应的 Handler,返回给前端控制器 DispatcherServlet,前端控制器再传给处理器适配器让它进行处理,处理器适配器会去找到对应的 Handler 去处理,处理后则就会返回一个 ModleAndView 对象。

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


持续更新中…

文章参考学习地址:https://blog.csdn.net/fageweiketang/article/details/81087852

SpringMVC 处理器适配器详解相关推荐

  1. SpringMVC异常处理机制详解[附带源码分析]

    SpringMVC异常处理机制详解[附带源码分析] 参考文章: (1)SpringMVC异常处理机制详解[附带源码分析] (2)https://www.cnblogs.com/fangjian0423 ...

  2. Spring/Boot/Cloud系列知识:SpringMVC 传参详解(下)

    (接上文<Spring/Boot/Cloud系列知识:SpringMVC 传参详解(上)>) 2.3.通过@PathVariable注解基于URL匹配符接收请求传参 为了便于开发人员实现更 ...

  3. SpringMVC的Controller详解

    SpringMVC的Controller详解 一.控制器Controller 控制器负责提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. ...

  4. SpringMVC工作流程 -- 详解

    SpringMVC 一,SpringMVC简介 二,SpringMVC的工作原理图 SpringMVC注解详解 执行流程 初始化HandlerMapping流程图: 三,SpringMVC核心组件 前 ...

  5. SpringMVC工作原理详解

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 先来看一下什么是 MVC 模式 MVC 是一种设计模式. MVC 的原理图如下: SpringMV ...

  6. springMVC请求流程详解

    SpringMVC框架是一个基于请求驱动的Web框架,并且使用了'前端控制器'模型来进行设计, 再根据'请求映射规则'分发给相应的页面控制器进行处理.核心流程: 第一步:发起请求到前端控制器(Disp ...

  7. SpringMvc三大组件详解

    SpringMvc框架结构图 处理器映射器:用户请求路径到Controller方法的映射 处理器适配器:根据handler(controlelr类)的开发方式(注解开发/其他开发) 方式的不同区寻找不 ...

  8. springmvc工作流程详解_SpringMVC工作原理详解

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 先来看一下什么是 MVC 模式 MVC 是一种设计模式. MVC 的原理图如下: SpringMV ...

  9. SpringBatch适配器详解

    一.SpringBatch适配器 1.SpringBatch分别有读(reader).处理(processor).写(writer).tasklet处理器. 读适配器:ItemReaderAdapte ...

最新文章

  1. Gerrit 代码审核服务器的工作流和原理
  2. 1 Knight Moves
  3. AI顶会组团“改版”:NeurIPS DDL推迟3周,ICLR连赞助商都要开视频,CVPR还在死撑...
  4. Jzoj4778 数列编辑器
  5. 微机原理换行代码_设置段落样式的标记中,用来换行的标记是:
  6. 现代软件工程讲义 4 团队和流程
  7. python出现traceback什么意思_python-异常处理 traceback获取详细异常
  8. 排序算法之---堆排序(很重要的一个结构,新手入门必备)
  9. JQUERY1.9学习笔记 之内容过滤器(三) has选择器
  10. C#图片处理之: 另存为压缩质量可自己控制的JPEG
  11. LeetCode 424. 替换后的最长重复字符(双指针+滑动窗口)
  12. 量化小科普【什么是量化?常用的股票量化指标、如何搭建量化交易系统】
  13. html 磁贴自动布局,也来“玩”MetroUI之磁贴(一)_html/css_WEB-ITnose
  14. 为什么越来越多的人选择了企业微信
  15. 时间把回忆开成花海,谁的等待,恰逢花开
  16. 徒手写代码之《机器学习实战》-----决策树算法(2)(使用决策树预测隐形眼镜类型)
  17. linux镜像文件目录,Linux - 系统 - 文件目录
  18. 服务器虚拟化专用ovf模板,Vmware虚拟机备份、OVF模板
  19. vue引入JQ的方法
  20. Oracle 查询工具 在WIN7 64位下安装PLSQL

热门文章

  1. SSH介绍与神器Tabby
  2. JavaScript给网页添加水印
  3. OWA动态密码短信认证方案,解决outlook邮件双因子认证问题
  4. android 系统的组成,简析Android 的GUI 系统组成
  5. jchdl - RTL实例 - MOS6502 ALU (Verilog)
  6. C语言开发单片机为什么大多数都采用全局变量的形式?
  7. html5情人节贺卡,情人节贺卡创意情话
  8. 华为招聘实习生~base深圳,坂田总部
  9. Mysql 数据库函数用法大全及示例
  10. yolov5控制测试视频窗口大小