每当我学习一个新技术时,我总是会问自己这个技术有哪些功能,能帮我解决哪些问题。

但是当我在网上进行搜索时,答案并不让我满意。

在使用springmvc很久以后,我将在这篇文章里对springmvc功能进行总结,并以浅白的语言描述springmvc是如何实现这些功能的。

springmvc说起来是一个框架,但是其实翻看源码,功能挺少的。

功能1:发起请求, 找到匹配的方法

在没有springmvc之前,web容器是通过以下这种格式的配置找到请求对应的执行方法。只需要该类实现了HttpServlet接口

<servlet>
<servlet-name>ServletDemo</servlet-name>
<servlet-class>class的全限定名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo</servlet-name>
<url-pattern>/ServletDemo</url-pattern>
</servlet-mapping>

有了springmvc之后,我们所有的请求都进入DispatcherServlet,我们只需要在web.xml中对所有访问路径拦截,让其进入org.springframework.web.servlet.DispatcherServlet类

 <servlet>
<!-- 配置DispatcherServlet -->
  <servlet-name>springMvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <!-- 指定spring mvc配置文件位置 不指定使用默认情况 -->
  <init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring/spring-mvc.xml</param-value>
   </init-param>
  <!-- 设置启动顺序 -->
  <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- ServLet 匹配映射 -->
  <servlet-mapping>
  <servlet-name>springMvc</servlet-name>
   <url-pattern>/*</url-pattern>
  </servlet-mapping>

容器启动时,spring通过扫描包文件的方式,获取所有标志了@controller的类,并对这些类里的方法进行扫描,如果该方法上又有@RequestingMapping,将类上的

@RequestMapping值与@RequestMapping的值拼接起来,形成一个路径作为value值。方法名作为key值,存入map对象。

前台发起请求的时候,就是通过遍历该map,找到请求路径对应的方法。

功能2:方法参数绑定以及类型转换

方法的参数类型有这么几种,基本类型,自定义对象,集合,数组,date。

如果参数类型是基本类型,比如int.double,String,根据前台传来的参数key值和方法参数名进行匹配,就能成功绑定参数。

功能3:实现拦截器

功能4:方法返回的数据解析成xml或者json

功能5:解析视图

springmvc功能以及源码实现分析的更多相关文章

  1. Spring Boot核心技术之Rest映射以及源码的分析

    Spring Boot核心技术之Rest映射以及源码的分析 该博客主要是Rest映射以及源码的分析,主要是思路的学习.SpringBoot版本:2.4.9 环境的搭建 主要分两部分: Index.ht ...

  2. MapReduce的ReduceTask任务的运行源码级分析

    MapReduce的MapTask任务的运行源码级分析 这篇文章好不容易恢复了...谢天谢地...这篇文章讲了MapTask的执行流程.咱们这一节讲解ReduceTask的执行流程.ReduceTas ...

  3. FFmpeg的HEVC解码器源码简单分析:解析器(Parser)部分

    ===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...

  4. FFmpeg源码简单分析:libswscale的sws_scale()

    ===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...

  5. LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

  6. DispatcherServlet源码注解分析

    DispatcherServlet的介绍与工作流程 DispatcherServlet是SpringMVC的前端分发控制器,用于处理客户端请求,然后交给对应的handler进行处理,返回对应的模型和视 ...

  7. 【Orleans开胃菜系列2】连接Connect源码简易分析

    [Orleans开胃菜系列2]连接Connect源码简易分析 /** * prism.js Github theme based on GitHub's theme. * @author Sam Cl ...

  8. RxJava && Agera 从源码简要分析基本调用流程(2)

    版权声明:本文由晋中望原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/124 来源:腾云阁 https://www.qclo ...

  9. JUC同步器框架AbstractQueuedSynchronizer源码图文分析

    JUC同步器框架AbstractQueuedSynchronizer源码图文分析 前提 Doug Lea大神在编写JUC(java.util.concurrent)包的时候引入了java.util.c ...

随机推荐

  1. Python 多进程和多线程的效率对比

    import time from threading import Thread from multiprocessing import Process def f1(): # time.sleep( ...

  2. react-native-svg的使用

    今天学习一下react-native-svg,一如既往,在安装该库的时候,就有一大堆坑等你填. 首先,我新建一个rn项目,按照官方说明先导入库 npm install react-native-svg ...

  3. centOS6.0虚拟机ip配置

    1.首先使用虚拟机安装好centOS6.0系统 2.虚拟机网络配置:(选择桥接模式) 3. 第一步:首先关闭防火墙 1.将防火服务从启动列表移除 #chkconfig --del iptables # ...

  4. AGV

    AGV AGV是(Automated Guided Vehicle)的缩写,意即“自动导引运输车”,是指装备有电磁或光学等自动导引装置,它能够沿规定的导引路径行驶,具有安全保护以及各种移载功能的运输车 ...

  5. iOS开发之UIGestureRecognizer

    一:首先查看一下关于UIGestureRecognizer的定义 //当前手势状态 typedef NS_ENUM(NSInteger, UIGestureRecognizerState) { //尚 ...

  6. vue项目中全局配置变量

    在项目中api管理需要用到全局变量,创建全局变量的方式也有很多. 1.通过export default const BASEURL = "http://localhost:3333/&quo ...

  7. crunch--字典生成工具

    Crunch是一种创建密码字典工具,按照指定的规则生成密码字典,可以灵活的制定自己的字典文件.使用Crunch工具生成的密码可以输出到屏幕,保存到文件.或另一个程序.crunch程序在2004年及以前 ...

  8. Elasticsearch CURL命令

    1.查看集群状态 curl '10.18.37.223:9200/_cat/health?v'绿色表示一切正常, 黄色表示所有的数据可用但是部分副本还没有分配,红色表示部分数据因为某些原因不可用 2. ...

  9. Python学习笔记-chapter1

    我自幼时自觉聪慧,但实缺恒力,遂二十余岁却一事无成,亦无一技傍身,实属惭愧. 少时便仰慕于新兴世界之IT技术,然因惰性,未曾一日习学. 今陷此困境,聊以度日,反无端生出些许时间,便志要潜心研学,不求能 ...

  10. java自定义注释

    一.什么是注释 说起注释,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描述数据的.就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义.而J2SE5 ...