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

简介

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

下载Tomcat嵌入式开发jar包

打开Tomcat9下载网址https://tomcat.apache.org/download-90.cgi

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

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的入口。

  1. 所有servlet或者Tomcat相关的类都需要在Tomcat.class中注册
  2. 需要配置Tomcat的工作目录
  3. Tomcat9可以不使用配置文件启动(比如web.xml),当然你同样可以选择使用配置文件启动Tomcat,这是可选择的

启动Tomcat

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


Host

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

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

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

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


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的各类请求

  1. setPath:设置访问路径的前缀

  2. addLifecycleListener:添加一个监听器

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

    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

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




©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容