Tomcat 嵌入式开发 (二) 嵌入式启动 Tomcat

简介

本文使用最新的Tomcat9.0.29版本进行开发,也是借鉴了网上一些Tomcat8/7版本的嵌入式开发代码(资料好少,得本身慢慢踩坑)html

下载Tomcat嵌入式开发jar包

打开Tomcat9下载网址https://tomcat.apache.org/dow...java

图片中使用红框圈起来的就是Tomcat嵌入式开发所须要的基础jar,固然能够去Maven官网搜索相应jar并引入到Maven项目的pom.xml中web

image-20191208205631279

pom.xml

<properties>
        <maven_version>9.0.29</maven_version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>${maven_version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>${maven_version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-el</artifactId>
            <version>${maven_version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-websocket</artifactId>
            <version>${maven_version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
    </dependencies>

Tomcat.class

这个类用于嵌入式开发程序,也就是说它是咱们启动Tomcat的入口。apache

  1. 全部servlet或者Tomcat相关的类都须要在Tomcat.class中注册
  2. 须要配置Tomcat的工做目录
  3. Tomcat9能够不使用配置文件启动(好比web.xml),固然你一样能够选择使用配置文件启动Tomcat,这是可选择的

启动Tomcat

首先咱们须要了解Tomcat启动所需的最基础配置,就像刚学java的时候同样,先System.out.println("Hello World"); (滑稽)json

Host

Host配置了Tomcat启动相关的主机参数,好比主机名(ip)、端口、热加载等等api

Tomcat tomcat = new Tomcat();
tomcat.getHost()

​ 首先实例化一个Tomcat,而后直接获取Host,注意这里是能够直接获取且host !=null ,接下来看看getHost()方法的源码,咱们能够看到,方法先获取Engine字段,若是engine.findChildren()返回值为空的话则实例化一个Host,而且设置name=“localhost”。tomcat

​ Host是一个interface,而它的实现类为StandardHost,该类中配备了一些默认的启动参数,有兴趣的能够点击该类的源码查看。websocket

protected String hostname = "localhost";

public Host getHost() {
        Engine engine = this.getEngine();
        if (engine.findChildren().length > 0) {
            return (Host)engine.findChildren()[0];
        } else {
            Host host = new StandardHost();
            host.setName(this.hostname);
            this.getEngine().addChild(host);
            return host;
        }
    }

接下来咱们须要建立一个StandardContext,这个类实现了Context接口,Context接口主要处理Servlet的各种请求app

  1. setPath:设置访问路径的前缀
  2. addLifecycleListener:添加一个监听器

    Tomcat.FixContextListener() 该监听器在不使用web.xml时为必须项socket

    Tomcat.DefaultWebXmlListener() 该监听器会获取一些已配置好的设置,适用于程序化配置

    Tomcat.ExistingStandardWrapper(Servlet existing) 该监听器使用自定义的Servlet,加强对Servlet的控制

紧接着咱们把context添加到host中

StandardContext context = new StandardContext();
context.setPath("/test");
context.addLifecycleListener(new Tomcat.FixContextListener());
tomcat.getHost().addChild(context);

更多文章详情请移步http://blog.seasedge.cn/archives/52.html

码字不易~请多多支持 *_*