深入理解spring mvc启动过程与原理

本文详细介绍了Spring MVC的启动过程,它伴随着Tomcat的启动。首先,Tomcat按照官方文档的步骤初始化Web应用,包括创建和初始化监听器、过滤器和servlet。接着,Spring MVC应用的启动主要涉及Listener、Filter和Servlet的初始化,特别是ContextLoaderListener创建并初始化了Spring的IOC容器。然后,DispatcherServlet作为Spring MVC的核心,负责处理用户请求,其初始化过程包括创建子IOC容器并配置相关组件。整个Spring MVC的初始化过程清晰地展示了如何在Tomcat环境中构建和准备应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring mvc的启动,是跟随着tomcat启动的,所以要深入理解spring mvc的启动过程与原理,需要先了解下tomcat启动的一些关键过程。

1、tomcat web应用启动及初始化过程

参考官方文档,tomcat web应用启动过程是这样的:

图1 tomcat web应用启动过程

大概意思就是,当一个Web应用部署到容器内时,在web应用开始执行用户请求前,会依次执行以下步骤:

  • 部署描述文件web.xml中<listener>元素标记的事件监听器会被创建和初始化;

  • 对于所有事件监听器,如果实现了ServletContextListener接口,将会执行其实现的contextInitialized()方法;

  • 部署描述文件中由<filter>元素标记的过滤器会被创建和初始化,并调用其init()方法;

  • 部署描述文件中由<servlet>元素标记的servlet会根据<load-on-startup>的权值按顺序创建和初始化,并调用其init()方法;

通过上述文档的描述,可知tomcat web应用启动初始化流程是这样的:

图2 tomcat web应用初始化过程

可以看出,在tomcat web应用的初始化流程是,先初始化listener,接着初始化filter,最后初始化servlet。

2、spring mvc应用的启动初始化

做过spring mvc项目开发的伙伴,都会配置一个web.xml配置文件,内容一般是这样的:

 
 

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!--全局变量配置--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/spring-main.xml </param-value> </context-param> <!--监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> <!--解决乱码问题的filter--> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- MVC Servlet --> <servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/spring-mvc*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

web.xml配置文件中也主要是配置了Listener,Filter,Servlet。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值