本文使用最新的Tomcat9.0.29版本進行開發,也是借鑑了網上一些Tomcat8/7版本的嵌入式開發代碼(資料好少,得本身慢慢踩坑)html
打開Tomcat9下載網址https://tomcat.apache.org/dow...java
圖片中使用紅框圈起來的就是Tomcat嵌入式開發所須要的基礎jar,固然能夠去Maven官網搜索相應jar並引入到Maven項目的pom.xml中web
<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的入口。apache
首先咱們須要瞭解Tomcat啓動所需的最基礎配置,就像剛學java的時候同樣,先System.out.println("Hello World"); (滑稽)json
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
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);