菜单开关

周梦康 发表于 2022-05-10 22 次浏览 标签 : 原创《Java Web 最佳学习路径》

上节演示的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>

添加启动入口

  1. 首先监听 8080 端口
  2. 定义应用上下文
  3. 把上节编写的DemoServlet加入到 Tomcat 中,命名为MkServlet
  4. 设置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

👇 下面是我的公众号,高质量的博文我会第一时间同步到公众号,给个关注吧!

评论列表