首页 > 其他分享 >Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )

Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )

时间:2023-10-24 10:33:03浏览次数:43  
标签:xml web FrameworkServlet 初始化 Spring contextConfigLocation MVC 上下文

Spring MVC中DispatcherServlet前端控制器是web服务器的入口,那么它是怎么样进行初始化的,是怎么样进行工作?

继承关系

Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )_初始化

1. HttpServletBean

主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。

2. FrameworkServlet

将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文。

3. DispatcherServlet 

初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等。

初始化

HttpSerlvetBean继承自HttpServlet,它覆写了init方法,对初始化过程做了一些处理。 

Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )_xml_02


web.xml配置

<servlet>
  <servlet-name>dispatcher</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:springConfig/dispatcher-servlet.xml</param-value>  
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>  
  <url-pattern>/</url-pattern>  
</servlet-mapping>

上面这段配置,传递了contextConfigLocation参数,之后构造BeanWrapper,这里使用BeanWrapper,有2个理由:
1. contextConfigLocation属性在FrameworkServlet中定义,HttpServletBean中未定义       
2. 利用Spring的注入特性,只需要调用setPropertyValues方法就可将contextConfigLocation属性设置到对应实例中,也就是以依赖注入的方式初始化属性。
然后设置DispatcherServlet中的contextConfigLocation属性(FrameworkServlet中定义)为web.xml中读取的contextConfigLocation参数,该参数用于构造SpringMVC容器上下文。

覆写initServletBean

FrameworkServlet继承自HttpServletBean,该类覆写的initServletBean方法。

Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )_初始化_03

initWebApplicationContext方法的具体实现逻辑:

Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )_xml_04


Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )_xml_05


web.xml配置

<context-param>
  <param-name>contextConfigLocation</param-name>  
  <param-value>classpath:springConfig/applicationContext.xml</param-value>  
</context-param>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
</listener>

web.xml中配置的ContextLoaderListener监听器中根据contextConfigLocation路径生成的上下文。

覆写onRefresh

DispatcherServlet覆写了FrameworkServlet中的onRefresh方法。

Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )_MVC_06


initStrategies方法内部会初始化各个策略接口的实现类,包括以下接口

1.异常处理初始化initHandlerExceptionResolvers方法:SpringMVC异常处理机制详解

2.视图处理初始化initViewResolvers方法:SpringMVC视图机制详解

3.请求映射处理初始化initHandlerMappings方法:详解SpringMVC请求的时候是如何找到正确的Controller

标签:xml,web,FrameworkServlet,初始化,Spring,contextConfigLocation,MVC,上下文
From: https://blog.51cto.com/u_16248220/8001188

相关文章

  • 如何使用Java Spring Boot 创建一个微服务项目 一?
    如何使用JavaSpringBoot创建一个微服务项目一?微服务现在更流行。它们可以用任何语言编写。在这篇文章中,让我们看看SpringBoot微服务。在本文中,我们看到一个基础项目currency-exchange-sample-service,它具有业务逻辑,并且可以在另一个项目 currency-conversion-sample-service ......
  • 如何使用Java Spring Boot 创建一个微服务项目 二?
    如何使用JavaSpringBoot创建一个微服务项目二?上一篇我们已经链接了如何使用JavaSpringBoot创建一个微服务项目一?这一篇我们接着实现第二部分微服务2:货币兑换样本服务这也是一个maven项目pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apac......
  • 8、SpringMVC之RESTful案例
    阅读本文前,需要先阅读SpringMVC之RESTful概述8.1、前期工作8.1.1、创建实体类Employeepackageorg.rain.pojo;importjava.io.Serializable;/***@authorliaojy*@date2023/10/19-21:31*/publicclassEmployeeimplementsSerializable{privateInte......
  • spring-cloud-starter-alibaba-nacos-discovery 配置信息
    spring-cloud-starter-alibaba-nacos-discovery1.spring-config-metadata.json{"groups":[{"name":"management.endpoint.nacosdiscovery","type":"com.alibaba.cloud.nacos.endpoint.NacosDiscovery......
  • Spring MVC
    一、SpringMVC子父容器问题因为SpringMVC属于Spring的子框架,所以SpringMVC中可以使用Spring框架的全部内容。Spring官方为SpringMVC专门定义了一个容器,这个容器里面放SpringMVC中全部Bean,且这个容器属于Spring容器的子容器。有这样的一个规定:SpringMVC子容器可以调用Spr......
  • MTV与MVC模型
    MTV#MTV:Django号称是MTV模型M:modelsT:templatesV:views MVC#MVC:Django本质也是MVC模型M:modelsV:viewsC:controller#vue框架:MVVM模型 ......
  • SpringBoot上传图片到指定目录并回显
    一、概述案例:1.利用SpringBoot写一个后台2.接收前端传递过来的图片并保存到服务器。3.前端可以通过url访问上传过的图片步骤:1.写一个FileController专门用来接收前端提交的图片文件,并把图片保存到服务器的指定位置2.配置W......
  • SpringBoot-自动配置原理
    导入start就会导入autoconfigure包autoconfigure包下面的META-INF/spring/org.springframe.boot.autoconfigure.AutoConfigation.imports文件存放了所有的xxxAutoConfigation自动配置类@EnableAutoConfigation注解,会把上面文件中的所有的自动配置类都导入进来,按需要加载。xxxA......
  • Spring Data JPA : 查-分页排序
    1.分页查询 pageNumber是从0开始,pageNumber=0,pageSize=3就是获取前3条参考创建分页Pageable变量创建Pageable对象,再查询importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.domain.Page;import......
  • spring data jpa 使用原生sql查询数据库 原生sql中有in关键字 该如何传参?直接传List集
    springdatajpa使用原生sql查询数据库原生sql中有in关键字该如何传参?直接传List集合就能找到数据,解析List集合交给springdatajpa框架去做遇到问题?第一次写的时候in关键字后面传的是将List集合转化为一个这样的字符串,"'123','23','23'" @Query(nativeQuery=true,......