全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Spring mvc DispatchServlet 实现机制

在Spring中, ContextLoaderListener只是辅助类,在web 容器启动的时候查找并创建WebApplicationContext对象,通过该对象进行加载spring的配置文件。而真正的逻辑实现其实是在DispatcherServlet中进行的,DispatcherServlet是实现servlet接口的实现类。

DispatcherServlet 在 web.xml 中的配置如下:

<servlet>
 <servlet-name>spring</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
 <servlet-name>spring</servlet-name>
 <url-pattern>/</url-pattern><!-- 如果写斜杠的话那就表示请求是否加后缀都可以 -->
</servlet-mapping>

DispatcherServlet 源码解析

DispatcherServlet 的 init() 方法在 HttpServletBean() 中实现的

init()

  1. 解析DispatcherServlet 配置的参数,封装成 ServletConfigPropertyValues对象。
  2. 将当前Servlet 类型的实例转换成BeanWrapper类型的实例。以便使用Spring中提供的注入功能进行对应的属性注入。这些属性如contextAttribute、contextClass、nameSpace、contextConfigLocation 等,都可以在web.xml 文件中以初始化参数的方式配置在servlet 的声明中。
  3. 调用 initServletBean() 初始化servletBean。

onRefresh() 方法

在初始化servletBean的时候,最终会调用 onRefresh() 方法,该方法主要是刷新Spring在web功能实现中所必须使用的全局变量。

  1. initMultipartResolver(context);初始化文件上传的处理类
  2. initLocaleResolver(context);初始化国际化配置的处理类
  3. initThemeResolver(context);初始化主题资源的处理类
  4. initHandlerMappings(context);初始化处理请求的类,主要负责处理请求调用Controller的处理类。
  5. initHandlerAdapters(context);初始化HandlerAdapter的适配器
  6. initHandlerExceptionResolvers(context);初始化异常处理类。
  7. initRequestToViewNameTranslator(context);初始化视图转换器,用于直接将请求转换为逻辑视图名。
  8. initViewResolvers(context);初始化视图解析器,定义了如何通过view 名称来解析对应View实例的行为
  9. initFlashMapManager(context);初始化Flash Map,提供一个请求存储属性,可供其它请求使用。

DispatchServlet的请求处理逻辑

servlet 接受到请求后,会调用service() 方法,然后service根据HTTP响应的请求方法进行调用响应的逻辑处理。

从类结构中,可以看出SpringMVC 支持 GET、POST、PUT、DELETE、OPTIONS、TRACE方法

从代码中,我们发现这几个方法交给 processRequest() 来进行处理请求。

processRequest()->doService()->doDispatch()
通过跟踪代码,最终处理请求的核心代码在doDispatch()方法中。

doDispatch() 方法

  1. 检查该请求是否是文件上传请求,如果是则把request转换为 MultipartHttpServletRequest类型。
  2. 根据request信息查找对应的Handler,如果没有找到对应的Handler,则通过response反馈错误信息。
  3. 通过当前的handler 查找对应的HandlerAdapter
  4. 判断该HTTP请求是不是HEAD或GET请求,如果是则检查HTTP请求头部的LastModified属性,来判断该页面是否需要重新加载。

  1. applyPreHandle() 执行该请求所匹配的拦截器,并调用所有匹配拦截器的preHandle()方法,进行处理
  2. 调用handle() 方法去根据请求路径去调用用户实现的Controller实现逻辑
  3. applyPostHandle()执行该请求所有匹配的拦截器,并调用所有匹配拦截器的postHandle()方法,进行处理
  4. processDispatchResult()处理页面跳转和调用拦截器的afterCompletion() 方法

processDispatchResult() 方法

  1. 处理异常信息
  2. 如果Controller成功返回了ModelAndView,则通过render()方法进行响应相应的页面信息
  3. 执行完毕后,执行该请求所有匹配的拦截器,并调用所有匹配拦截器的afterCompletion()方法,进行处理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Spring  # mvc  # DispatchServlet  # tomcat中Servlet的工作机制详细介绍  # JS pushlet XMLAdapter适配器用法案例解析  # 使用java基于pushlet和bootstrap实现的简单聊天室  # springboot配置嵌入式servlet容器的方法  # Jsp+Servlet实现简单登录注册查询  # 解决IDEA的maven项目中没有新建Servlet文件的选项问题  # 如何HttpServletRequest文件对象并储存  # Servlet机制Pushlet原理及用法详解  # 拦截器  # 转换为  # 文件上传  # 加载  # 是在  # 那就  # 如果没有  # 可供  # 可以看出  # 跳转  # 这几个  # 提供一个  # 转换成  # 错误信息  # 中以  # 配置文件  # 大家多多  # 主要是  # 则把  # 全局变量 


相关文章: 如何使用Golang table-driven基准测试_多组数据测量函数效率  网站制作报价单模板图片,小松挖机官方网站报价?  建站上传速度慢?如何优化加速网站加载效率?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  如何通过宝塔面板实现本地网站访问?  金*站制作公司有哪些,金华教育集团官网?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  php json中文编码为null的解决办法  如何在云指建站中生成FTP站点?  建站之星3.0如何解决常见操作问题?  建站主机选购指南:核心配置优化与品牌推荐方案  ,巨量百应是干嘛的?  如何快速辨别茅台真假?关键步骤解析  如何通过NAT技术实现内网高效建站?  如何确保FTP站点访问权限与数据传输安全?  简历在线制作网站免费版,如何创建个人简历?  存储型VPS适合搭建中小型网站吗?  北京专业网站制作设计师招聘,北京白云观官方网站?  5种Android数据存储方式汇总  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  建站主机空间推荐 高性价比配置与快速部署方案解析  实例解析Array和String方法  宁波免费建站如何选择可靠模板与平台?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  XML的“混合内容”是什么 怎么用DTD或XSD定义  已有域名和空间,如何快速搭建网站?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  建站主机选虚拟主机还是云服务器更好?  b2c电商网站制作流程,b2c水平综合的电商平台?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  ui设计制作网站有哪些,手机UI设计网址吗?  如何在服务器上三步完成建站并提升流量?  建站主机功能解析:服务器选择与快速搭建指南  ,网页ppt怎么弄成自己的ppt?  建站主机解析:虚拟主机配置与服务器选择指南  定制建站流程解析:需求评估与SEO优化功能开发指南  javascript中对象的定义、使用以及对象和原型链操作小结  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  如何解决VPS建站LNMP环境配置常见问题?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  潮流网站制作头像软件下载,适合母子的网名有哪些?  建站主机选购指南:核心配置与性价比推荐解析  如何在腾讯云服务器上快速搭建个人网站?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何通过虚拟机搭建网站?详细步骤解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。