Spring Boot原理(下):embedded嵌入式tomcat容器

标签: Spring  spring

    在上文中,我们实现了无web.xml即可部署标准的MVC服务。但是这个MVC仍需要在tomcat容器内运行,既必须显示的构建tomcat容器,然后把MVC服务发布到容器中,最后才能运行。

    而实际上Spring Boot没有看到显示的tomcat容器,好像tomcat是在Spring boot内部一样。 这时如何做到的呢?

    答案就是:使用embedded tomcat。 

一、演示

    1、在上一步既有的Eclipse的NoXML工程基础上,删除tomcat server定义。 删除所有与tomcat相关的jar文件。 既整个工程完全没有tomcat的任何内容。

    2、从tomcat官方网站上,下载embedded文件。下载后会得到名为:apache-tomcat-9.0.35-embed.zip的文件。

   3、 解压该文件。得到一下jar文件。 将这些文件纳入到NoXML工程的classpath中。

annotations-api.jar
ecj-4.15.jar
tomcat-dbcp.jar
tomcat-embed-core.jar
tomcat-embed-el.jar
tomcat-embed-jasper.jar
tomcat-embed-websocket.jar

  4、在NoXML工程中增加一个类com.zyp.TomcatServer,代码如下:

public class TomcatServer {
    public static void main(String[] args) {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);
        tomcat.addWebapp("/NoXML", "D:\\");  // 第一个参数为contextPath,既Url中的基路径
        
        try {
            tomcat.getConnector();// Tomcat 9.0 必须调用 Tomcat#getConnector() 方法之后才会监听端口
            tomcat.start();
            tomcat.getServer().await(); // 等待,避免马上运行结束。
        }catch(LifecycleException e) {
            e.printStackTrace();
        }
    }
}

  5、运行上面的TomcatServer类。 仅适用普通的Java程序方式运行即可。  运行后,可以看到日志中与上文的日志类似,MyWebApplicationInitializer中onStartup()方法也被自动调用。

  6、打开浏览器测试,与上文相同访问:http://localhost:8080/NoXML/app/index.do  可以看到日志中有输出,且页面显示如下。效果完全和上文的相同:

 

 

二、结论

    通过embedded tomcat方式,相当于把tomcat集成在了MVC程序内,而不是传统的MVC在tomcat容器内。 

     使用以上方式,即可轻松实现类似于Spring Boot的方式。

版权声明:本文为zyplanke原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zyplanke/article/details/106533862