既然要將tomcat內置到項目中,並且能夠成功的啟動項目就要知道 tomcat 做了哪些事情 ,那么就必須先搞明白
一個 普通的web項目是如何被我們本地配置的tomcat啟動並運行的
(1)、 先告訴tomcat 要運行哪些項目 (也就是在使用eclipse、idea啟動項目前對tomcat的配置工作、或linux上將編譯后的war包拷貝到webapp下)
從而在 后面在啟動tomcat時,tomcat就會加載編譯后的.class項目
(2)、 tomcat在加載編譯后的項目時也會加載 web.xml或上篇博客的WebApplication文件 ,而在這個文件中
做的事情就是 加載spring進而加載springMVC
加載SpringMVC: 將springMVC的DispatcherServlet注冊到ServletContext容器
那么只需要在項目內部集成tomcat時,運行main方法啟動tomcat之前將編譯后的項目和tomcat相關聯,然后tomcat就能自動加載WebApplication類了
1、添加tomcat maven 依賴 (通過代碼來創建tomcat實例)
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>8.5.5</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> <version>8.5.5</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>8.5.5</version> </dependency>
2、創建SpringMain(作用:運行main啟動tomcat)、StartTomcat(作用:創建Tom實例,然后讓tomcat加載編譯后的項
(1)StartTomcat做的事情 創建線程類, springboot啟動tomcat的源碼也是這樣的,這里只是寫了必要的步驟
public class StartTomcat implements Runnable { @Override public void run() { //創建tomcat實例 Tomcat tom = new Tomcat(); //設置端口 tom.setPort(8081); try{ //獲取項目編譯后的claess 路徑 String path = StartTomcat.class.getResource("/").getPath(); //獲取webapp 文件 String filePath = new File("src/main/webapp").getAbsolutePath(); //然后將webapp下的項目添加至tomcat的context容器(context對應一個運行的項目) Context context =tom.addWebapp("/項目名",filePath); //參數1:一般是項目名 對應請求url中的項目名
//webResourceRoot 用於加載 項目的class文件
WebResourceRoot webResource = new StandardRoot(context); webResource.addPreResources(new DirResourceSet(webResource,"/WEB-INF/classes",path,"/")); tom.start(); }catch (Exception e) { e.printStackTrace(); } //阻塞 ,等待前端連接 tom.getServer().await(); } }
A、 創建tomcat實例
B、 獲取項目編譯后的claess 路徑
C、獲取webapp 目錄下的項目
D、然后將webapp下的項目添加至tomcat的context容器
E、啟動tomcat
F、將tomcat的Server實例await 監聽請求的到來
(2) SpringMain
public class SpringMain { public static void main(String[] args) { //啟動 new StartTomcat().run(); } }
這里也可以自定義一個注解 ,啟動標注了此注解了的main方法時 ,做new StartTomcat().run(); 的事情就可以了
(3)、運行main方法 ,就能啟動tom服務了
下一篇 : springboot是如何訪問 resources目錄下的static、template等 靜態資源的 (因為沒了ssm項目中的webapp目錄了)