模擬Springboot二:內置tomcat


既然要將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目錄了)

    

  

 

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM