SpringMVC 处理器适配器详解
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 映射信息,其示例代码如下:
- <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mapping">
- <props>
- <prop key="/test1.action">testController1</prop>
- <prop key="/test2.action">testController2</prop>
- </props>
- </property>
- </bean>
- <bean id="testController1" class="com.fageweiketang.controller.TestController1"/>
- <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 类中去添加相应的注解即可,示例代码框架如下:
- //使用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>
可以发现,上面这段和之前的处理器映射器一样,其配置通用。
4.总结
SpringMVC 中处理器映射器 HandlerMapping 根据配置找到相应的 Handler,返回给前端控制器 DispatcherServlet,前端控制器再传给处理器适配器让它进行处理,处理器适配器会去找到对应的 Handler 去处理,处理后则就会返回一个 ModleAndView 对象。
其配置方式有两种,一个是非注解方式配置,也就是基于 xml 配置文件。第二个就是注解配置,在类中做相应的注解即可。
持续更新中…
文章参考学习地址:https://blog.csdn.net/fageweiketang/article/details/81087852
SpringMVC 处理器适配器详解相关推荐
- SpringMVC异常处理机制详解[附带源码分析]
SpringMVC异常处理机制详解[附带源码分析] 参考文章: (1)SpringMVC异常处理机制详解[附带源码分析] (2)https://www.cnblogs.com/fangjian0423 ...
- Spring/Boot/Cloud系列知识:SpringMVC 传参详解(下)
(接上文<Spring/Boot/Cloud系列知识:SpringMVC 传参详解(上)>) 2.3.通过@PathVariable注解基于URL匹配符接收请求传参 为了便于开发人员实现更 ...
- SpringMVC的Controller详解
SpringMVC的Controller详解 一.控制器Controller 控制器负责提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. ...
- SpringMVC工作流程 -- 详解
SpringMVC 一,SpringMVC简介 二,SpringMVC的工作原理图 SpringMVC注解详解 执行流程 初始化HandlerMapping流程图: 三,SpringMVC核心组件 前 ...
- SpringMVC工作原理详解
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 先来看一下什么是 MVC 模式 MVC 是一种设计模式. MVC 的原理图如下: SpringMV ...
- springMVC请求流程详解
SpringMVC框架是一个基于请求驱动的Web框架,并且使用了'前端控制器'模型来进行设计, 再根据'请求映射规则'分发给相应的页面控制器进行处理.核心流程: 第一步:发起请求到前端控制器(Disp ...
- SpringMvc三大组件详解
SpringMvc框架结构图 处理器映射器:用户请求路径到Controller方法的映射 处理器适配器:根据handler(controlelr类)的开发方式(注解开发/其他开发) 方式的不同区寻找不 ...
- springmvc工作流程详解_SpringMVC工作原理详解
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 先来看一下什么是 MVC 模式 MVC 是一种设计模式. MVC 的原理图如下: SpringMV ...
- SpringBatch适配器详解
一.SpringBatch适配器 1.SpringBatch分别有读(reader).处理(processor).写(writer).tasklet处理器. 读适配器:ItemReaderAdapte ...
最新文章
- Gerrit 代码审核服务器的工作流和原理
- 1 Knight Moves
- AI顶会组团“改版”:NeurIPS DDL推迟3周,ICLR连赞助商都要开视频,CVPR还在死撑...
- Jzoj4778 数列编辑器
- 微机原理换行代码_设置段落样式的标记中,用来换行的标记是:
- 现代软件工程讲义 4 团队和流程
- python出现traceback什么意思_python-异常处理 traceback获取详细异常
- 排序算法之---堆排序(很重要的一个结构,新手入门必备)
- JQUERY1.9学习笔记 之内容过滤器(三) has选择器
- C#图片处理之: 另存为压缩质量可自己控制的JPEG
- LeetCode 424. 替换后的最长重复字符(双指针+滑动窗口)
- 量化小科普【什么是量化?常用的股票量化指标、如何搭建量化交易系统】
- html 磁贴自动布局,也来“玩”MetroUI之磁贴(一)_html/css_WEB-ITnose
- 为什么越来越多的人选择了企业微信
- 时间把回忆开成花海,谁的等待,恰逢花开
- 徒手写代码之《机器学习实战》-----决策树算法(2)(使用决策树预测隐形眼镜类型)
- linux镜像文件目录,Linux - 系统 - 文件目录
- 服务器虚拟化专用ovf模板,Vmware虚拟机备份、OVF模板
- vue引入JQ的方法
- Oracle 查询工具 在WIN7 64位下安装PLSQL