开发者不再需要关心传统容器(如Tomcat)中web.xml的配置,同时实现容器的具体技术都是可替换及可更改的,这些技术以插件化的Starter组件方式在运行时加载到Spring容器中。...执行刷新,源码如下: 3.创建Tomcat实例 这里我们继续跟进 createEmbeddedServletContainer方法,获得一个嵌入式的容器工厂类:EmbeddedServletContainerFactory...Spring Boot的默认容器是Tomcat,其工厂类实现了Tomcat实例的加载,代码如下: 在prepareContext方法中,可以将默认的JSP和Servlet Bean组件加载到Spring...5.Tomcat组件加载 下面的代码是在Tomcat容器启动后,允许用户存储自定义scope,用来将Web专用的scope注册到BeanFactory中,同时配置servlet、filter、listener...beans.onStartup ( servletContext ) 方 法 中 将 实 现 从 Servlet 到URLMapping的映射,至此Tomcat的初始化工作完成。
很多 Java web 应用和服务,包括开源的和商业化的(比如 Alfresco, iRise, Confluence等),都倾向于将 Apache Tomcat Servlet 引擎整个嵌入到他们的分发包中...在下面的教程中,我们将会对 Jetty (Jetty 是一个为此目的而设计的一种嵌入式 servlet 引擎)进行测试,同时还会展示如何将 Jetty 迁移到 Tomcat 。...最后,我在 Tomcat 的文档中没有找到类似 Jetty 中的 setResourceBase 方法来获取静态资源,因此只能创建一个自己的 StaticContentServlet,接下来将会看到。...这个获取静态资源的 servlet 只有一些基本功能。只是简单地找到类路径下的资源并返回。难点是正确地设置 Mime-Type。...如果你由于软件分发打算学习如何将 Tomcat 嵌入到 web 应用中,希望这篇教程可以帮到你。
SpringBoot的ClassLoader加载机制 在Spring Boot的嵌入式Web容器原理一节中,我们已经介绍了Spring Boot对Tomcat容器的加载过程,本节我们进一步讲解SpringBoot...每个类加载器都是如此,只有当父类加载器在自己的搜索范围内找不到指定类时,子类加载器才会尝试自己去加载。Java类加载机制如下图所示。 我们通常将类加载器分为下面的三种类型。...● 启 动 类 加 载 器 ( Bootstrap ClassLoader ) :加 载jre/lib/rt.jar。...● 应 用 程 序 类 加 载 器 ( Application ClassLoader ) :加 载classpath上指定的类库。...启动过程中通过扫描将资源对象加载到Spring IoC容器中。
properties文件, 去去springboot-autoConfiguration看配置类 高级特性 自己写的logback.xml中可以加 ...嵌入式Servlet容器 SpringBoot默认使用的是嵌入式的Servlet容器(Tomcat) 1)定制和修改Servlet容器的相关配置 server.port=8081 server.servlet.context-path...使用外置的Servlet容器 嵌入式简单便捷、优化定制比较复杂,使用定制器或properties等来改变 外置的Serlvlet容器:外面安装Tomcat服务器--应用打包war包打包 必须创建war包...将嵌入式Tomcat指定为provided 必须编写一个ServletInitializer,并调用configure方法 启动服务器 外置Servlet容器的启动原理, jar包:执行Spring主类的...applicationContextListener然后保存起来 从多个配置类中找到main方法的主配置类 运行run方法 获取SpringapplicationRunListeners:从类路径下META-INF
它的属性代表了整个 servlet 容器的特性。 属性表 属性 描述 备注 className 这个类必须实现org.apache.catalina.Server接口。...属性表 属性 描述 备注 defaultHost 默认主机名,用于标识将处理指向此服务器上主机名称但未在此配置文件中配置的请求的主机。 这个名字必须匹配其中一个嵌套的主机元素的名字属性。...嵌入式 API 方式 在 pom.xml 中添加依赖 org.apache.tomcat.embed tomcat-embed-core...说明 本示例是使用 org.apache.tomcat.embed 启动嵌入式 Tomcat 的最简示例。...且貌似只能找到 Tomcat6 、Tomcat7 插件。
Web服务器 SERVLET 应用程序应作为基于servlet的Web应用程序运行,并应启动嵌入式Servlet Web服务器 ② setInitializers((Collection) getSpringFactoriesInstances...通过上面分析,可以得出结论,通过@EnableAutoConfiguration,Spring在启动的时候,会把上面100多个配置类加载到SpringIOC容器中去。...下面我们继续分析,在ServletWebServerFactoryAutoConfiguration类中,会引入三个容器注入到IOC容器中,SpringBoot默认的WEB容器为Tomcat,所以我们重点分析...Tomcat,进入EmbeddedTomcat类(Embedded英文意思为嵌入式的) 进入EmbeddedTomcat类后,可以看到该类定义一个bean,往SpringIOC容器注入了名为TomcatServletWebServerFactory...的类 进入TomcatServletWebServerFactory类,可以发现Spring底层会执行:Tomcat tomcat = new Tomcat(),SpringBoot嵌入的Tomcat
SpringBoot 笔记 ( 十一 ):Servlet容器 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器 1)、定制和修改Servlet容器的相关配置 1、修改配置文件中的和...嵌入式的Servlet容器的定制器,来修改Servlet容器的配置 12345678910 @Bean //将这个定制器加入到容器中public EmbeddedServletContainerCustomizer...>spring-boot-starter-web 引入web模块默认就是使用嵌入式的Tomcat作为Servlet容器; 2.Jetty(长链接类的服务...getSelfInitializer()); 7)、嵌入式的Servlet容器创建对象并启动Servlet容器 先启动嵌入式的Servlet容器,再将ioc容器中剩下没有创建出的对象获取出来,这个时候我们自己写的...打包方式 jar包:执行SpringBoot主类的main方法,启动ioc容器,创建嵌入式的Servlet容器。
旧版 配置嵌入式Servlet容器 SpringBoot默认使用Tomcat作为嵌入式Servlet容器 如何定制和修改Servlet容器相关配置 1.在配置文件中定制和修改Servlet容器有关的配置...,只要是嵌入式Servlet容器工厂,后置处理器就会工作. 3.后置处理器从容器中获取所有嵌入式容器处理器定制器,调用嵌入式容器处理器定制器中的方法对嵌入式容器处理器进行配置 嵌入式Servlet容器启动原理...,Tomcat嵌入式Servlet容器工厂创建对象,后置处理器就获取所有定制器来定制Tomcat嵌入式Servlet容器的配置 7.使用Tomcat嵌入式Servlet容器工厂获取嵌入式servlet...容器 8.嵌入式的Servlet容器创建对象并启动Servlet容器,先启动嵌入式的Servlet容器,再将IOC容器中对象获取出来 至此,完成IOC容器启动创建嵌入式Servlet容器 使用外置的...) 外置的Servlet容器:外置安装Tomcat-应用war包的方式打包 步骤 1.创建一个war项目,配置好项目的Project Structure 2.将嵌入式的Tomcat指定为provided
前面看到了,使用 spring boot 零配置就可以运行起来(笔者在 yml 中配置了端口号,不配的话,它有一个默认的 8080 端口号),这就是 SpirngBoot 自动装配的能力了。...@EnableAutoConfiguration 启用 Spring Application Context 的自动配置,尝试猜测和配置您可能需要的 bean。...configurations 不能为空,根据异常里面的信息:在 META-INF/spring.factories 中没有找到自动配置类。...可以看到里面包含了很多的自动配置类,其中我们主要关注下 EmbeddedWebServerFactoryCustomizerAutoConfiguration 从名称翻译含义为 嵌入式 Web 服务器出厂自定义程序自动配置...这里有一个 tomcat 启动相关的代码,这也是为什么嵌入式 tomcat 会启动的原因 这一章主要学习到了通过查看源代码的方式。
执行此操作时,将 使用下表中显示的订单: 网络过滤器 订购 MetricsWebFilter Ordered.HIGHEST_PRECEDENCE + 1 WebFilterChainProxy (Spring...默认情况下,Jersey servlet已注册并映射到 /* 。您可以通过将 @ApplicationPath 添加到 ResourceConfig 来更改映射。...28.4嵌入式Servlet容器支持 Spring Boot包括对嵌入式Tomcat, Jetty和Undertow服务器的支持。大多数开发人员使用适当的“Starter”来获取完全配置的实例。...默认情 况下,嵌入式服务器侦听端口 8080 上的HTTP请求。 如果您选择在CentOS上使用Tomcat ,请注意,默认情况下,临时目录用于存储已编译的JSP,文件上载等。...要避免此行为,您可能希望自定义 tmpwatch 配置,以便不删除 tomcat.* 目 录或配置 server.tomcat.basedir ,以便嵌入式Tomcat使用不同的位置。
Tomcat独立部署模式是通过startup脚本启动,Tomcat中的Bootstrap和Catalina会负责初始化类加载器,并解析server.xml和启动这些组件。...Spring Boot中Web容器相关接口 WebServer 为支持各种Web容器,Spring Boot抽象出嵌入式Web容器,定义WebServer接口: Web容器比如Tomcat、Jetty...类,继承Tomcat的StandardContext: 注册Servlet 有@RestController,为什么还要自己去注册Servlet给Tomcat?...在Web应用的入口类上加上@ServletComponentScan,并且在Servlet类上加上@WebServlet,这样Spring Boot会负责将Servlet注册到内嵌的Tomcat中。...**@Configuration**标识的类中。
28.4.2 Servlet上下文初始化 嵌入式servlet容器不直接执行Servlet 3.0+ javax.servlet.ServletContainerInitializer 接口或Spring...扫描Servlet,过滤器和侦听器 使用嵌入式容器时,可以使用 @ServletComponentScan 启用使用 @WebServlet , @WebFilter 和 @WebListener 注释的类的自动注册...28.4.4自定义嵌入式Servlet容器 可以使用Spring Environment 属性配置公共servlet容器设置。...SSL HTTP压缩 Spring Boot尝试尽可能多地暴露常见设置,但这并非总是可行。...对于这些情况,专用命名空间提供特定于服务器的自定义(请参 阅 server.tomcat 和 server.undertow )。例如, 可以使用嵌入式servlet容器的特定功能配置访问日志。
示例:在应用中添加ViewResolver组件用来匹配HTML静态页面,如果没有匹配成功,则返回false,由其他ViewResolver继续尝试匹配。...示例:Spring Boot可以为HttpMessageConverters类添加自定义转换类,通过这种方式可以将所有的HttpMessageConverters的Bean添加到Converter列表,...要使用该接口,我们需要先注释掉前面两节中提到的相关代码,然后创建一个类: 默 认 情 况 下 , Jersey 将 以 Servlet 的 形 式 注 册 一 个 ServletRegistrationBean...Tomcat容器完成自动配置的类图结构。...我们在最新的Spring Boot下查看Tomcat的相关配置,发现有两个自动装配类,分别包含了三个定制器,还有一个工厂类。
//Tomcat的设置 server.tomcat.xxx 法2:编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器;来修改Servlet...3)替换为其他嵌入式Servlet容器 默认支持以下容器 Tomcat 嵌入式的Tomcat作为Servlet容器 --> org.springframework.boot...,调用定制器的定制方法 5)使用外置的Servlet容器 嵌入式Servlet容器:应用打成可执行的jar优点:简单、便携缺点:默认不支持JSP、优化定制比较复杂 步骤: 创建一个war项目 将嵌入式的...自定义MyBatis的配置规则: 在容器中添加一个ConfigurationCustomizer ? 在启动类中添加MapperScan注解批量扫描所有的Mapper接口 ?
Servlet容器 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器; 问题?...嵌入式Servlet容器启动原理; 什么时候创建嵌入式的Servlet容器工厂?...什么时候获取嵌入式的Servlet容器并启动Tomcat; 获取嵌入式的Servlet容器工厂: 1)、SpringBoot应用启动运行run方法 2)、refreshContext(context);...容器; 先启动嵌入式的Servlet容器,再将ioc容器中剩下没有创建出的对象获取出来; ==IOC容器启动创建嵌入式的Servlet容器== 9、使用外置的Servlet容器 嵌入式Servlet容器...项目;(利用idea创建好目录结构) 2)、将嵌入式的Tomcat指定为provided; org.springframework.boot</groupId
文件,将下面这段内容复制到pom.xml文件中 servlet之源码角度 最后我们如果能够在tomcat源码中找到载入servlets的依据,就更加能说明问题了 于是我们在idea中的tomcat8.0源码,关键是到哪里找呢?...源码中除了能够看到各种Java类型的文件之外,一脸懵逼,怎么办? 不妨先跳出来想想,如果我们是tomcat源码的设计者,也就是上述手写的代码,我们怎么将业务代码中的servlets加载到源码中?...适用于内存比较小的嵌入式设备中。...开启浏览器缓存,nginx静态资源部署 9 嵌入式Tomcat主类寻找 9.1 maven org.apache.tomcat.maven</groupId
8、配置嵌入式Servlet容器 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器; ? 问题?... 引入web模块默认就是使用嵌入式的Tomcat作为Servlet容器; Jetty 嵌入式的Servlet容器并启动Tomcat; 获取嵌入式的Servlet容器工厂: 1)、SpringBoot应用启动运行run方法 2)、refreshContext(context);...容器; 先启动嵌入式的Servlet容器,再将ioc容器中剩下没有创建出的对象获取出来; IOC容器启动创建嵌入式的Servlet容器 9、使用外置的Servlet容器 嵌入式Servlet容器:应用打成可执行的...项目;(利用idea创建好目录结构) 2)、将嵌入式的Tomcat指定为provided; org.springframework.boot</groupId
Java并没有提供任何标准的方式来加载jar包中内嵌的jar包。一般开发者使用影子jar技术来解决这种问题。一个影子jar只是简单的将所有jar的类打包到一个单独的超级jar包中。...Spring Boot的web模块内置嵌入的Tomcat, Jetty, Undertow来构建自包含的Servlet容器。...嵌入式web应用,自带容器(Tomcat, Jetty等)。...内嵌Servlet容器要求 下列内嵌容器在满足对应的Servlet和JDK版本要求时,支持开箱即用(out of the box): 名称 Servlet版本 Java版本 Tomcat 8 3.1...你也可以将Spring Boot应用部署到任何兼容Servlet 3.0+的容器。 3.
领取专属 10元无门槛券
手把手带您无忧上云