1. 程式人生 > >模擬Springboot二:內置tomcat

模擬Springboot二:內置tomcat

資源 run 模擬 pre await 既然 cor dir 連接

既然要將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做的事情 創建線程類:    

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目錄了)

    

 

  

 

模擬Springboot二:內置tomcat