缺省配置Springboot Web应用运行中DispatchServlet的初始化

这篇博客详细分析了Springboot Web应用中DispatcherServlet的初始化过程,包括启动准备和运行时的初始化。文章深入源代码,探讨了DispatcherServlet如何进行配置、其初始化方法的实现,以及缺省策略组件的设定。同时,提到了Spring MVC的官方文档,并引用了相关参考资料以供深入学习。
摘要由CSDN通过智能技术生成

概述

缺省配置Springboot Web应用中的SpringMVC DispatcherServlet,从整个应用开始启动到最终处于服务请求的状态,粗略地讲,可以分为两步 :

  1. 缺省配置Springboot Web应用启动过程中SpringMVC DispatcherServlet的准备

这一步相当于把DispatcherServlet安装部署到一个可以随时服务请求的web应用中去;

关于这一步的详细情况,可以参考文章
缺省配置Springboot Web应用启动中准备SpringMVC DispatcherServlet

  1. 缺省配置Springboot Web应用运行中SpringMVC DispatcherServlet的初始化

这一步指的是Servlet.init()方法的调用,本文主要分析这一过程。

源代码分析

HttpServletBeaninit方法

DispatcherServlet和父类的继承关系如下 :

DispatcherServlet -> FrameworkServlet -> HttpServletBean --> HttpServlet

这个继承关系里面,DispatcherServlet,FrameworkServlet,HttpServletBean都是Spring的类,位于以下包 :

org.springframework.web.servlet

HttpServletJava Servlet API,表示一个HTTP Servlet,是一个抽象类,位于包 :

javax.servlet.http

这里面Servlet的初始化方法 init() 实现在 HttpServletBean 中 :

	// 类 org.springframework.web.servlet.HttpServletBean 的方法
	@Override
	public final void init() throws ServletException {
   
		if (logger.isDebugEnabled()) {
   
			logger.debug("Initializing servlet '" + getServletName() + "'");
		}

		// Set bean properties from init parameters.
		// 从初始化参数 init paramters 中提取参数值设置bean属性
		// 完全缺省配置的Springboot Web应用,这里最终的pvs为空:pvs.isEmpty()==true
		PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
		if (!pvs.isEmpty()) {
   
			try {
   
				BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
				ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
				bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironment()));
				initBeanWrapper(bw);
				bw.setPropertyValues(pvs, true);
			}
			catch (BeansException ex) {
   
				if (logger.isErrorEnabled()) {
   
					logger.error("Failed to set bean properties on servlet '" + getServletName() + "'", ex);
				}
				throw ex;
			}
		}

		// Let subclasses do whatever initialization they like.
		// initServletBean()是HttpServletBean定义的一个空方法,目的是让子类填充相应的初始化实现 
		initServletBean();

		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值