zoukankan      html  css  js  c++  java
  • springmvc功能以及源码实现分析

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

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

    在使用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与ajax交互
    [PAT] A1052 Linked List Sorting
    [PAT] A1032 Sharing
    [PAT] A1076 Forwards on Weibo
    [PAT] A1034 Head of a Gang
    [PAT] A1030 Travel Plan
    [PAT] A1031 Hello World for U
    [PAT] A1029 Median
    [PAT] A1028 List Sorting
    [PAT] A1026 Table Tennis
  • 原文地址:https://www.cnblogs.com/scru/p/10191938.html
Copyright © 2011-2022 走看看