上节演示的web启动方式很“上个世纪”。上个世纪每个网站 webapp 流量不大,所以很多应用放一个服务器是可能的。现代企业级应用基本都是独生子女,娇生惯养。同时上节方案也不利于本地深层次的 debug 调试等。
现在微服务横行,Tomcat 怎么能不分一杯羹呢,所以像 SpringBoot 都是引入了嵌入式 Tomcat 直接启动 SpringBoot 应用的时候就直接启动了一个 Web Server。
下面我们就在上节的代码基础上引入嵌入式 Tomcat。
maven 引入 tomcat 包
首先添加依赖包tomcat-embed-core
,因为tomcat-embed-core
里面已经包含javax.servlet-api
,所以昨天引入的包可以省略了。
只依赖一个即可。
<dependencies>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.43</version>
</dependency>
</dependencies>
添加启动入口
- 首先监听
8080
端口 - 定义应用上下文
- 把上节编写的
DemoServlet
加入到 Tomcat 中,命名为MkServlet
- 设置
MkServlet
的访问路由为/*
package net.mengkang;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import java.io.File;
public class MkTomcat {
public static void main(String[] args) throws LifecycleException {
Tomcat tomcat = new Tomcat();
tomcat.setPort(8080);
Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());
Tomcat.addServlet(ctx, "MkServlet", new DemoServlet());
ctx.addServletMappingDecoded("/*", "MkServlet");
tomcat.start();
tomcat.getServer().await();
}
}
直接启动main
方法,然后访问 http://localhost:8080/ 就达到和昨天一样的效果了,因为我们配置的/*
,所以我们访问任何地址 http://localhost:8080/abcdefg 都是一样的结果,原来微服务就这?
这也为我们在 Servlet 里编写 dispatch 做铺垫。
原创博客,如需转载,请联系 i@mengkang.net
链接://mengkang.net/1515.html
👇 下面是我的公众号,高质量的博文我会第一时间同步到公众号,给个关注吧!