<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Servlet on 蓝尾蜂鸟</title><link>https://clibing.com/tags/servlet/</link><description>Recent content in Servlet on 蓝尾蜂鸟</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Copyright © 2011-2026 clibing. All Rights Reserved.</copyright><lastBuildDate>Thu, 16 Apr 2020 17:18:56 +0800</lastBuildDate><atom:link href="https://clibing.com/tags/servlet/index.xml" rel="self" type="application/rss+xml"/><item><title>DispatcherServlet</title><link>https://clibing.com/posts/java/spring/dispatcherservlet/</link><pubDate>Thu, 16 Apr 2020 17:18:56 +0800</pubDate><guid>https://clibing.com/posts/java/spring/dispatcherservlet/</guid><description><![CDATA[<h3 id="dispatcherservlet" data-numberify>DispatcherServlet<a class="anchor ms-1" href="#dispatcherservlet"></a></h3>
<p><picture><img class="img-fluid " alt="" src="https://clibing.com/images/java/DispatcherServlet.png?v=fba7934f280e05fe331658c7d7767396" loading="lazy" width="963" height="443" />
</picture>

</p>
<ol>
<li>关系说明</li>
</ol>
<ul>
<li>DispatcherServlet 继承了FrameworkServlet;</li>
<li>FrameworkServlet 继承了HttpServletBean并实现了ApplicationContextAware(设置上下文);</li>
<li>HttpServletBean继承了HttpServletu(抽象类)，并实现了获取环境变量的设置和获取接口; HttpServlet实现了为Java EE Servlet的标准</li>
</ul>
<ol start="2">
<li>启动流程</li>
</ol>
<ul>
<li>当容器启动时，容器(tomcat、jetty、undertow)，启动后会依次加载HttpServlet的实现类</li>
<li>Spring MVC中DispatcherServlet为实现类，并作为默认的启动HttpServlet</li>
<li>加载init()，init方法在HttpServletBean中实现了init方法，主要方法是执行一个抽象方法initServletBean， 这个initServletBean方法有子类实现(模板方法)</li>
<li>initServletBean有FrameworkServlet实现，是Spring MVC初始化核心方法， initWebApplicationContext()中主要方法是实现onRefresh(), 这个onRefresh()为方法为（策略模式）有子类实现，最终出事化上下文</li>
<li>DispatcherServlet中的实现了onRefresh方法。内部调用了initStrategies()方法。initStrategies()内部方法实现了Spring MVC的9大组件</li>
</ul>
<ol start="3">
<li>Spring MVC 9大组件</li>
</ol>
<ul>
<li>
<p>initMultipartResolver(context);
用于处理上传请求。处理方法是将普通的request包装成MultipartHttpServletRequest，后者可以直接调用getFile方法获取File，如果上传多个文件，还可以调用getFileMap得到FileName-&gt;File结构的Map。此组件中一共有三个方法，作用分别是判断是不是上传请求，将request包装成MultipartHttpServletRequest、处理完后清理上传过程中产生的临时资源。</p>]]></description></item></channel></rss>