美文网首页MyBatis+SpringMVC+SpringBootSpringBoot精选Tomcat
Tomcat 嵌入式开发 (二) 嵌入式启动 Tomcat

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

作者: 海苔胖胖 | 来源:发表于2019-12-23 10:46 被阅读0次

    简介

    本文使用最新的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

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



    相关文章

      网友评论

        本文标题:Tomcat 嵌入式开发 (二) 嵌入式启动 Tomcat

        本文链接:https://www.haomeiwen.com/subject/iyhznctx.html