当前位置: 首页 > news >正文

Spring MVC入口Servlet原理简介说明(HttpServletBean,FrameworkServlet,DispatcherServlet)

转自:

Spring MVC入口Servlet原理简介说明(HttpServletBean,FrameworkServlet,DispatcherServlet)

下文笔者讲述Spring MVC中Servlet的转发原理,如下所示:

 Spring MVC中DispatcherServlet前端控制器是web服务器的入口,它的继承关系,如下图所示:


各类的功能,如下所示:

  1. HttpServletBean
    主要做一些初始化的工作,
    将web.xml中配置的参数设置到Servlet中
    如servlet标签的子标签init-param标签中配置的参数
  2. FrameworkServlet
    将Servlet与Spring容器上下文关联
    其实也就是初始化FrameworkServlet的属性webApplicationContext
    这个属性代表SpringMVC上下文
    它有个父类上下文
    既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文
  3. DispatcherServlet
    初始化各个功能的实现类
    如异常处理、视图处理、请求映射处理等

初始化 HttpSerlvetBean继承自HttpServlet,它覆写了init方法,并留出了一个空方法initServletBean(),供子类重写

HttpSerlvetBean初始化

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>

覆写initServletBean

FrameworkServlet继承自HttpServletBean,该类覆写的initServletBean方法
并留出空方法initFrameworkServlet()供子类扩展


initWebApplicationContext方法的具体实现逻辑:
FrameworkServlet中initWebApplicationContext源码 FrameworkServlet中initWebApplicationContext源码
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方法

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

  1. 异常处理初始化initHandlerExceptionResolvers方法:SpringMVC异常处理机制详解
  2. 视图处理初始化initViewResolvers方法:SpringMVC视图机制详解
  3. 请求映射处理初始化initHandlerMappings方法:详解SpringMVC请求的时候是如何找到正确的Controller

相关文章:

  • 【附源码】Python计算机毕业设计社区卫生预约挂号系统
  • 【C++】顺序表,链表,栈的练习(千万要会做)每日小细节007
  • k8s编程operator——client-go基础部分
  • MySQL纯代码复习
  • 零基础入门学习Web开发:HTML篇(一)
  • 【云原生】docker 搭建ElasticSearch7
  • ubuntu安装openresty
  • 前端爱心代码跟个风
  • 【数据结构】C语言实现顺序栈 OJ题 —— 有效的括号
  • Hive笔记
  • 趣味益智小游戏 三子棋+五子棋 优化版(可任意选择棋盘大小)
  • MySQL : 彻底搞懂一条SQL的执行过程
  • 【成为红帽工程师】第三天 web服务器
  • 【Node.js实战】一文带你开发博客项目(API 对接 MySQL)
  • 鸿蒙开发套件全面升级,助力鸿蒙生态蓬勃发展
  • 0基础学习移动端适配
  • JavaScript 基本功--面试宝典
  • javascript面向对象之创建对象
  • Java深入 - 深入理解Java集合
  • linux安装openssl、swoole等扩展的具体步骤
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • supervisor 永不挂掉的进程 安装以及使用
  • Xmanager 远程桌面 CentOS 7
  • 设计模式(12)迭代器模式(讲解+应用)
  • 通过调用文摘列表API获取文摘
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #pragma pack(1)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (Java数据结构)ArrayList
  • (安卓)跳转应用市场APP详情页的方式
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .CSS-hover 的解释
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .net6Api后台+uniapp导出Excel
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET的数据绑定
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @DataRedisTest测试redis从未如此丝滑
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [20170713] 无法访问SQL Server
  • [51nod1610]路径计数
  • [AIGC] MySQL存储引擎详解
  • [ARC066F]Contest with Drinks Hard
  • [bzoj1324]Exca王者之剑_最小割
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计
  • [C#]科学计数法(scientific notation)显示为正常数字