您的位置:首页 > 科技 > 能源 > 网络服务协议需要交印花税吗_深圳网络营销十年乐云seo专家_吉林seo管理平台_产品运营推广方案

网络服务协议需要交印花税吗_深圳网络营销十年乐云seo专家_吉林seo管理平台_产品运营推广方案

2024/12/23 21:36:11 来源:https://blog.csdn.net/qq_37200262/article/details/144132962  浏览:    关键词:网络服务协议需要交印花税吗_深圳网络营销十年乐云seo专家_吉林seo管理平台_产品运营推广方案
网络服务协议需要交印花税吗_深圳网络营销十年乐云seo专家_吉林seo管理平台_产品运营推广方案

一、什么是Tomcat?

Tomcat介绍:

Tomcat容器是一个开源的、轻量级的Java Web应用服务器,主要用于运行Java Servlet、JavaServer Pages(JSP)和Java Expression Language(EL)技术‌。以下是关于Tomcat容器的详细解释:
‌核心功能‌:Tomcat作为Servlet容器,负责处理客户端的HTTP请求,并将这些请求转化为服务器端的Java代码执行,最终生成HTTP响应返回给客户端。同时,它还支持JSP技术,允许开发者创建动态Web内容。
‌特点‌:Tomcat具有轻量级、多线程处理、配置灵活等特点。它可以在较低的硬件配置上运行,且能够同时处理多个客户端请求,提高服务器的并发性能。此外,Tomcat的配置非常灵活,可以根据具体的应用需求进行调优。
‌用途‌:Tomcat广泛用于部署和运行Java Web应用程序,这些应用程序通常打包成WAR文件并部署在Tomcat中运行‌。
综上所述,Tomcat容器是Java Web开发中的重要工具,为开发者提供了稳定、高效的运行环境。

Tomcat的架构图:
在这里插入图片描述

Bootstrap中的main方法:

bootstrap.init(); // 初始化类加载器
bootstrap.load(); // 间接调用Catalina,创建对象树,然后调用生命周期的init方法初始化整个对象树
bootstrap.start(); // 间接调用Catalina的start方法,然后调用生命周期的start方法启动整个对象树

二、SpringBoot中详解

spring-boot-autoconfigure\2.2.2.RELEASE\spring-boot-autoconfigure-2.2.2.RELEASE.jar!\META-INF\spring.factories这个自动装配的文件和注入了这两个和容器相关的类:
在这里插入图片描述
第一个是EmbeddedWebServerFactoryCustomizerAutoConfiguration
image.png
image.png
在这个配置类里面就是根据我们的配置来内嵌对应的Web容器,比如Tomcat或者Jetty等。
第二个是:ServletWebServerFactoryAutoConfiguration
首先来看下在类的头部引入和一些核心的信息
imagepng

重点我们需要看下EmbeddedTomcat这个内部类。

imagepng

看到的核心其实是创建了一个TomcatServletWebServerFactory对象并注入到了Spring容器中。这块的内容非常重要,是我们后面串联的时候的一个切入点。

现在开始debug源码看下再什么时候完成的tomcat的创建以及启动流程。

SpringApplication的run(String… args)方法中:

// 刷新应用上下文 完成Spring容器的初始化refreshContext(context);

继续refreshContext:

	private void refreshContext(ConfigurableApplicationContext context) {refresh(context);if (this.registerShutdownHook) {try {context.registerShutdownHook();}catch (AccessControlException ex) {// Not allowed in some environments.}}}

继续refresh(context);

	/*** Refresh the underlying {@link ApplicationContext}.* @param applicationContext the application context to refresh*/protected void refresh(ApplicationContext applicationContext) {Assert.isInstanceOf(AbstractApplicationContext.class, applicationContext);((AbstractApplicationContext) applicationContext).refresh();}

跳转到ServletWebServerApplicationContext的refresh方法:

	public final void refresh() throws BeansException, IllegalStateException {try {super.refresh();}catch (RuntimeException ex) {stopAndReleaseWebServer();throw ex;}}

AbstractApplicationContext的refresh()找到onRefresh():
跳转到ServletWebServerApplicationContext的onRefresh:
开始创建webServer:

	protected void onRefresh() {super.onRefresh();try {createWebServer();}catch (Throwable ex) {throw new ApplicationContextException("Unable to start web server", ex);}}

createWebServer方法如下:

	private void createWebServer() {WebServer webServer = this.webServer;ServletContext servletContext = getServletContext();if (webServer == null && servletContext == null) {ServletWebServerFactory factory = getWebServerFactory(); // 获取WebServer的工厂对象this.webServer = factory.getWebServer(getSelfInitializer()); // 获取具体的WebServer}else if (servletContext != null) {try {getSelfInitializer().onStartup(servletContext);}catch (ServletException ex) {throw new ApplicationContextException("Cannot initialize servlet context", ex);}}initPropertySources();}

factory.getWebServer(getSelfInitializer()); // 获取具体的WebServer如下:
factory是TomcatServletWebServerFactory和上面对应上了
在这里插入图片描述
可以看到,从容器中获取的工厂对象其实就我们上面注入的对象,然后根据工厂对象获取到了一个TomcatWebServer实例,也就是Tomcat服务对象。关键点我们需要看下getWebServer方法的逻辑

imagepng

imagepng

然后继续进入到 getTomcatWebServer方法中。

imagepng

进入构造方法查看

imagepng

进入Tomcat初始化的方法initialize方法

imagepng

进入start方法

imagepng

imagepng

到这儿后面的逻辑其实就是Tomcat自身启动的逻辑了。这就需要你的Tomcat基础了,到这SpringBoot启动是如何内嵌Tomcat容器的到这儿就结束了哦。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com