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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Linux之ant安装部署「建议收藏」

    Linux之ant安装部署「建议收藏」 今天呢,在这里讲下linux环境下ant的部署,废话不多说,直接进入教程。 首先呢,先安装基础环境Java,在这里就不多说了…..不熟悉的小伙伴可以百度找找,很简单的……. 接下来呢,就开始ant的部署,具体分为如下几个步骤:  1.获取介质:       在apache的官网中直接下载,下载地址为:http://ant.apache.org/    …

    2022年7月24日
  • linux搭建sendmail邮件服务器,Linux系统Sendmail架设Mail服务器[通俗易懂]

    一、安装Sendmail完全安装RedHatLinux9.0时,Sendmail就会自动内置,版本号为8.12.8-4.如果你不确定Linux是否已经安装有sendmail,可以输入以下命令查看:[root@ahpengroot]rpm–qa grepsendmail如果确定没有安装,请在图形界面下依次选择单击“主菜单-系统设置-添加删除应用程序”,然后在打开的“软件包管理”窗口里选…

    2022年4月17日
  • 协同过滤推荐算法(java原生JDK实现-附源码地址)

    协同过滤推荐算法(java原生JDK实现-附源码地址)一、项目需求1.需求链接https://tianchi.aliyun.com/getStart/information.htm?raceId=2315222.需求内容竞赛题目在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐模型。在完成这件任务的过程中,我们不仅需要利用用户在这

    2022年4月6日
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛「建议收藏」

    【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛「建议收藏」你学的编程语言真的是你想要的吗

    2022年5月23日
  • 锐捷交换机开启poe_锐捷交换机status灯绿灯闪烁

    锐捷交换机开启poe_锐捷交换机status灯绿灯闪烁Ruijie#conft//进入配置模式Enterconfigurationcommands,oneperline.EndwithCNTL/Z.Ruijie(config)#vlan800//配置网管VLAN,此VLANID固定为800Ruijie(config-vlan)#nameManager-Vlan//配置网管VLAN名称Ruijie(config-vlan)#v…

    2022年9月13日
  • 内核态和用户态的区别_会导致用户进程用户态到内核态

    内核态和用户态的区别_会导致用户进程用户态到内核态1、用户态和内核态的区别?明白这两个概念之前,我们得知道用户空间和内核空间。用户空间:指的就是用户可以操作和访问的空间,这个空间通常存放我们用户自己写的数据等。内核空间:是系统内核来操作的一块空间,这块空间里面存放系统内核的函数、接口等。在用户空间下执行,我们把此时运行得程序的这种状态成为用户态,而当这段程序执行在内核的空间执行时,这种状态称为内核态。当一个任务(进程)执行系统…

    2022年9月18日

发表回复

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

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