在上文中,我们实现了无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的方式。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐