美文网首页
spring-mvc

spring-mvc

作者: 何德何能者 | 来源:发表于2021-02-14 10:01 被阅读0次

spring-mvc

spring-mvc不是spring的core内容,需要额外引入jar包
spring-mvc默认是servlet实现,所以运行spring-mvc需要借助servlet容器,如tomcat

WebApplicationContext
spring-mvc有一个Application的实现WebApplicationContext, 用于定义web环境上下文.

启动
通常的spring-mvc启动,是编写好web.xml文件并把程序打成war包,丢到tomcat的指定目录,最后启动tomcat.
由tomcat引导启动spring-mvc程序。
如果是使用spring-boot,过程类似,只是都是用java代码实现web.xml配置合内嵌tomcat的方式。

通常web.xml的配置必须的两个配置是
1、ContextLoaderListener监听器,负责监听tomcat的启动和销毁,并初始化WebApplicationContext.
contextInitialized方法
初始化的WebApplicationContext对应的是spring-application.xml声明的context
2、DispatcherServlet 也初始化WebApplicationContext. 查找controller配置。
父类HttpServletBean.init()方法
初始化的WebApplicationContext是spring-mvc.xml声明的context

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:spring-application.xml</param-value>
  </context-param>
  <servlet>
    <servlet-name>spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:spring-mvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>spring-mvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

controller到RequestMapping
即controller的@RequestMapping到HandlerMapping的处理过程

RequestMappingHandlerMapping对象实现了InitializingBean接口,在RequestMappingHandlerMapping被spring初始化完成后触发后置方法。
最终触发父类AbstractHandlerMethodMapping的initHandlerMethods, 在这里把controller的@ReqeustMapping方法处理成HandlerMapping
大致流程
1、获取容器的所有bean名称
2、遍历获取到的所有bean名称,如果不是被代理对象,则继续。如果是被代理对象,则不处理。
3、获取bean类型,如果类型非空, 且bean类型有@Controller或者@RequestMapping标识, 则继续
4、对bean类的所有方法进行处理, 包括根据方法和类描述生成RequestMappingInfo对象
5、最后把RequestMappingInfo注册到MappingRegistry
至此,完成controller的RequestMapping注册.

请求路由过程

http请求通过tomcat到DispatcherServlet,doDispatch方法的getHandler(request)步骤.
1、通过AbstractHandlerMethodMapping的getHandlerInternal方法。
HandlerMapping有多种实现, 最主要的就是RequestMappingHandlerMapping和SimpleUrlHandlerMapping

2、根据HandlerMapping取得对应的适配器 RequestMappingHandlerAdapter,
换句话说,如果是SimpleUrlHandlerMapping的话适配器就是HttpRequestHandlerAdapter

3、使用适配器执行方法调用和处理返回值

总结

spring-mvc 加载启动过程需要额外的配置, 即使是使用spring-boot,也是在spring-boot-autoconfigure模块指定了servlet容器和DispatcherServlet的配置,自动封装了一层。了解spring-mvc的基本启动加载过程,有助于理解整个http请求响应的处理.

相关文章

  • spring-mvc

    spring-mvc spring-mvc不是spring的core内容,需要额外引入jar包spring-mvc...

  • springmvc xml

    spring-beans.xml spring-context.xml spring-mvc spring-dat...

  • 源码分析spring-mvc启动流程

    spring-mvc 的启动流程 1、request 请求到达 dispatchServlet-> doServi...

  • spring-mvc

  • spring-mvc

    springmvc DispatcherServlet:前端控制器 概念:spring在web层的一个mvc架构的...

  • Spring-MVC

    监听器初始化ioc 配置文件拆分 @ControllerAdvice全局异常拦截 @RestControllerA...

  • Spring-MVC

    2019-06-14 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块,可以取代Servlet...

  • spring-mvc

    您有一份文件待查收!即刻点击链接获取文件: https://cowtransfer.com/s/8f865d551...

  • Spring-MVC

    Spring MVC是Spring给我们提供的一个用于简化Web开发的框架 简介 MVC体系 常用的开发框架一般基...

  • 0509-web:app页面完善:s-mvc交互框架(数据绑定)

    spring-mvc交互框架 概述 Controller会返回一个ModelAndView的实例 Spring根据...

网友评论

      本文标题:spring-mvc

      本文链接:https://www.haomeiwen.com/subject/jwcgtltx.html