Spring Boot原理(下):embedded嵌入式tomcat容器
在上文中,我们实现了无web.xml即可部署标准的MVC服务。但是这个MVC仍需要在tomcat容器内运行,既必须显示的构建tomcat容器,然后把MVC服务发布到容器中,最后才能运行。而实际上Spring Boot没有看到显示的tomcat容器,好像tomcat是在Spring boot内部一样。 这时如何做到的呢?答案就是:使用embedded tomcat。一、准备环境1、在上一步既有的Ec
在上文中,我们实现了无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的方式。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)