本文使用最新的Tomcat9.0.29版本进行开发,也是借鉴了网上一些Tomcat8/7版本的嵌入式开发代码(资料好少,得自己慢慢踩坑)
打开Tomcat9下载网址 https://tomcat.apache.org/dow...
图片中使用红框圈起来的就是Tomcat嵌入式开发所需要的基础jar,当然可以去Maven官网搜索相应jar并引入到Maven项目的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的入口。
首先我们需要了解Tomcat启动所需的最基础配置,就像刚学java的时候一样,先System.out.println("Hello World"); (滑稽)
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的各类请求
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);