SpringMVC 处理器适配器详解[通俗易懂]

SpringMVC 处理器适配器详解[通俗易懂]0x00:介绍处理器适配器HandlerAdapter:作用是根据映射器找到的处理器Handler信息,按照特定的规则去执行相关的处理器Handler。其配置方式有两种,一种是基于xml的资源配置,也就是非注解的配置方式。另外一种就是基于Annotation注解的配置。其注解在代码中做上特殊标记,这些标记就可以编译、类加载、运行时被读取,然后去执行相应的处理。0x01:…

大家好,又见面了,我是你们的朋友全栈君。

0x00:介绍

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

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

0x01:非注解处理器适配器

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 类中只能编写一个方法,这个弊端就可以通过注解的方式来解决。

0x02:注解处理器适配器

注解处理器适配器,只需要在指定的地方声明一些注解信息即可。在 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>

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

0x03:总结

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

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


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

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

                                                                         SpringMVC 处理器适配器详解[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133487.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm调试教程_pycharm 调试

    pycharm调试教程_pycharm 调试首先设置断点,点击行号显示的一侧,在指定行设置断点。.如果这时我们直接右键run这个代码。他还是会直接运行,不会理会断点所以要右键选择run下面的debug这几个红框的意思依次是:有绿点表示程序运行中,还没有结束Debuger窗口表示现在在debug调试界面。Console表示这是控制台,也就是看打印的界面。右下的箭头是执行下一步(不同pycharm版本可能不同)右上的箭头表示…

    2022年8月28日
    5
  • 信赖铃音的PS2游戏目录2017.6

    信赖铃音的PS2游戏目录2017.6信赖铃音PS2无损镜像游戏光碟分类目录淘宝最全1600个游戏上架大家扫我加我微信可以直接在微店或者微信红包购买PS2游戏哦!微信号298337705或者直接扫我或者保存图片长按识别二维码就可以加我了!感谢大家支持信赖铃音的无损PS2游戏光碟选好可以直接给我名单拍件数或者直接用购物车选购店址:https://playstation2.taobao.com/PS2搜索信赖铃音PS…

    2025年8月4日
    2
  • Golang洗牌算法「建议收藏」

    Golang洗牌算法「建议收藏」简介主要思路为每次随机挑选一个值,放在数组末尾。然后在n-1个元素的数组中再随机挑选一个值,放在数组末尾,以此类推。注意,一定要设置随机种子,否则每次返回的值是一样的。codefuncshuffle(nums[]int)[]int{ rand.Seed(time.Now().UTC().UnixNano()) fori:=len(nums);i>0;i–{…

    2022年9月21日
    3
  • 状态模式state_解释器模式

    状态模式state_解释器模式状态模式 State动机模式定义实例结构要点总结笔记动机在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能不同.如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转换之间引入紧耦合模式定义允许一个对象在其内部状态改变时改变它的行为.从而使对象看起来似乎修改了其行为.从而使对象看起来似乎修改了其行为.从而使对象看起来似乎修改了其行为.实例朴素根据状态来执行下一步enum NetworkStat

    2022年8月9日
    5
  • Vue新手入门指南(易懂)

    Vue新手入门指南(易懂)Vue.js学习心得前言对于一名初入编程的新手来说,JavaScript的语法偏向复杂,选择Vue库可以说是一个较为不错的体验。在很多方面,Vue简化了JavaScrip语法,并且实现数据与视图的双向绑定,达到响应式页面的目的。1.Vue实例和模板语法<body> <divid=”app”> <p>{{message}}</p> </div><script> newVue({ el:’#app’

    2022年5月4日
    43
  • python进制转换代码_十进制转八进制python

    python进制转换代码_十进制转八进制python本文实例讲述了Python实现的十进制小数与二进制小数相互转换功能。分享给大家供大家参考,具体如下:十进制小数⇒二进制小数乘2取整对十进制小数乘2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。如此不断重复,直到小数部分为0或达到精度要求为止.第一次所得到为最高位,最后一次得到为最低位如:0.25的二进制0.25*2=…

    2022年9月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号