SpringBoot内嵌Tomcat原理剖析

SpringBoot内嵌Tomcat原理剖析1 嵌入式 Tomcat nbsp nbsp nbsp nbsp 懂得 SpringBoot 的童鞋应该很清楚 对于 SpringBoot 应用来说 不管应用程序是属于何种类型 都是一个 Main 方法走遍天下 而且对于 web 应用 只需要引入 spring boot starter web 中这个依赖 应用程序就好像直接给我们来了个 tomcat 一样 其实 这里并不是 SpringBoot 团队里面有什么骚操

1.嵌入式Tomcat

 <dependency> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> </dependency> 

简单的一个servlet

public class DemoServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
    response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.println(" " ); out.println(" " ); out.println(" 
   
     " 
   ); out.println(""); out.println(""); out.println(" " ); out.println("

嵌入式tomcat

"
); out.println(""); out.println(""); } }

EmbeddedTomcatServer 嵌入式Tomat入口:

public class EmbeddedTomcatServer { 
    public static void main(String[] args) throws Exception { 
    //把目录的绝对的路径获取到 String classpath = System.getProperty("user.dir"); System.out.println(classpath); //new一个Tomcat Tomcat tomcat = new Tomcat(); //插件是6或者6以前的 //Embbedded //设置Tomcat的端口 //tomcat.setPort(9090); Connector connector = tomcat.getConnector(); connector.setPort(9091); //设置Host Host host = tomcat.getHost(); //我们会根据xml配置文件来 host.setName("localhost"); host.setAppBase("webapps"); //前面的那个步骤只是把Tomcat起起来了,但是没啥东西 //要把class加载进来,把启动的工程加入进来了 Context context = tomcat.addContext(host, "/", classpath); if (context instanceof StandardContext) { 
    StandardContext standardContext = (StandardContext) context; standardContext.setDefaultContextXml("E:\\apache-tomcat-8.5.51\\conf\\web.xml"); //我们要把Servlet设置进去 Wrapper wrapper = tomcat.addServlet("/", "DemoServlet", new DemoServlet()); wrapper.addMapping("/embeddedTomcat"); } //Tomcat跑起来 tomcat.start(); //强制Tomcat server等待,避免main线程执行结束后关闭 tomcat.getServer().await(); } } 

运行结果:
在这里插入图片描述
     EmbeddedTomcatServer类作为程序的入口,代码逻辑其实就是通过tomcat提供的外部接口类在配置server.xml这个文件;要了解这个类的每个配置步骤,可能需要对tomcat相关组件有一定的理解,如下所示,对于每个组件的作用,博主画了一个图进行简单的介绍
在这里插入图片描述
     对于Tomcat源码的构建,有兴趣的童鞋可参考这篇文章:https://www.jb51.net/article/95120.htm








2. Spring内嵌Tomcat原理剖析

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213691.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:51
下一篇 2026年3月18日 下午5:52


相关推荐

  • Manus开始向用户收费了

    Manus开始向用户收费了

    2026年3月15日
    1
  • 数据类型

    一:什么是数据在接触数据之前我们已经知道了变量,那么什么是变量呢又该如何声明变量呢声明变量name="王妃"在这个变量中共包含三个部分:在这个示例中变量的值“王妃”

    2022年3月29日
    37
  • 比特币交易系统源码_比特币开源代码是什么

    比特币交易系统源码_比特币开源代码是什么探索比特币源码3-熟悉RPC接口比特币核心客户端实现了JSON-RPC接口,这个接口可以通过命令行帮助程序bitcoin-cli访问,也可以通过编程的形式在程序中访问。本文主要探索3点:*什么是JSON-RPC接口*使用bitcoin-cli进行JSON-RPC接口调用实验*区块链相关RPC接口快速一览在下一文中我们重点研究如何通过编程的形式调用Bitcoi…

    2022年10月9日
    4
  • cpu流水线工作原理_嵌入式工作原理

    cpu流水线工作原理_嵌入式工作原理现在的CPU处理器一般都是超流水线工作,动不动就是10级以上流水线,超高主频,这两者之间有什么关系呢?今天就跟大家科普下CPU流水线的工作原理,以及他们之间的关系。说到流水线,很多人会想到富士康;说到富士康,很多人会想到张全蛋。作为富士康3号流水线资深质检员,下面就请张全蛋给大家科普下什么是流水线,大家鼓掌欢迎。MichealJack眼中的流水线大家好,我是张全蛋,英文名叫MichealJack,法文名叫霍雷呆-杰Q赖,大家也可以叫我查理。作为iPhone手机3号流水线的资.

    2022年8月20日
    8
  • Android手机上使用Socks5全局代理-教程+软件

    Android手机上使用Socks5全局代理-教程+软件前言:在Android上使用系统自带的代理,限制灰常大,仅支持系统自带的浏览器。这样像QQ、飞信、微博等这些单独的App都不能使用系统的代理。如何让所有软件都能正常代理呢?ProxyDroid这个软件能帮你解决!使用方法及步骤如下:一、推荐从GooglePlay下载ProxyDroid,目前最新版本是v2.6.6。二、对ProxyDroid进行配置(基本配置:)…

    2022年6月24日
    611
  • python表白代码大全简单-python告白代码,只属于程序员的浪漫

    python表白代码大全简单-python告白代码,只属于程序员的浪漫不知何时,不知何因,程序员这个行业成为大家茶余饭后取乐的无辜群体。只要说到程序员,脑海中就浮现出刻板印象,标配穿搭:格子衫,牛仔裤,黑框眼镜。当然秃顶也是必须的,更狠的吐槽还有邋里邋遢,不懂浪漫,不知人情世故!开始可能只是幽默玩笑,后面慢慢就越传越多,大家便信以为真!可是程序员真的是这样吗?随着现在编程这个行业的普遍高薪收入,程序员又成为大家关注的焦点,深入的了解后,发现程序员其实是很可爱的一个群…

    2022年6月2日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号