為啥要重學Tomcat?| 博學谷狂野架構師

語言: CN / TW / HK

Tomcat基本使用

img

什麼是Web伺服器

web伺服器的定義

其實並沒有標準定義,一般認為Web伺服器一般指網站伺服器,是指駐留於因特網上某種型別計算機的程式,可以向瀏覽器等Web客戶端提供文件,也可以放置網站檔案,讓全世界瀏覽;可以放置資料檔案,讓全世界下載。

img

Web伺服器的特點

  • 伺服器是一種被動程式:只有當Internet上執行其他計算機中的瀏覽器發出的請求時,伺服器才會響應。
  • 伺服器一般使用HTTP(超文字傳輸協議)與客戶機瀏覽器進行資訊交流,這就是人們常把它們稱為HTTP伺服器的原因。
  • Web伺服器不僅能夠儲存資訊,還能在使用者通過Web瀏覽器提供的資訊的基礎上執行指令碼和程式

什麼是Tomcat

Tomcat是由Apache軟體基金會屬下Jakarta專案開發的Servlet容器,是開發和除錯JSP程式的首選,實現了對Servlet和JavaServer Page的支援,並提供Web伺服器的一些特有功能。

Tomcat是一款開源輕量級Web應用伺服器,是一款優秀的Servlet容器實現。

Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程式或服務聯結器,用Java編寫的伺服器端程式,具有獨立於平臺和協議的特性,主要功能在於互動式地瀏覽和生成資料,生成動態Web內容。

Servlet嚴格來講是指Java語言實現的一個介面,一般情況下我們說的Servlet是指任何實現了這個Servlet介面的類。

  • 例項化並呼叫init()方法初始化該 Servlet,一般 Servlet 只初始化一次(只有一個物件)
  • service()(根據請求方法不同調用doGet() 或者 doPost(),此外還有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。
  • 當 Server 不再需要 Servlet 時(一般當 Server 關閉時),Server 呼叫 Servlet 的 destroy() 方法。

簡單總結下,tomcat是一箇中間件,在B/S架構中,瀏覽器發出的http請求經過tpmcat中介軟體,轉發到最終的目的伺服器上,響應訊息再通過tomcat返回給瀏覽器。

tomcat所做的事情主要有:開啟監聽埠監聽使用者的請求,解析使用者發來的http請求然後訪問到你指定的應用系統,然後你返回的頁面經過tomcat返回給使用者。

Apache,Nginx和Tomcat的區別

  • Apache全稱是 Apache Http Server Project, Tomcat全稱是 Apache Tomcat。
  • Apache和 Nginx用於處理靜態資源, tomcat用來處理動態資源。
  • Apache和Nginx相比,Nginx適合做前端伺服器,適合做負載均衡。

一般情況下,使用的時候,都是 Apache+Tomcat一起使用或者 Nginx+tomcat一起使用。

典型的Servlet的處理流程

  1. 第一個到達伺服器的HTTP請求被委派到Servlet容器。
  2. Servlet容器在呼叫service()方法之前載入Servlet。
  3. 然後Servlet容器處理由多個執行緒產生的多個請求,每個執行緒執行一個單一的Servlet例項的service()方法。

Tomcat版本介紹

Tomcat版本 6 7 8 8.5 9
JDK ≥5.0 ≥6.0 ≥7.0 ≥7.0 ≥8.0
Servlet 2.5 3 3.1 3.1 4
JSP 2.1 2.2 2.3 2.3 2.3
EL 2.1 2.2 3 3 3
WebScoket N/A 1.1 1.1 1.1 1.1

Servlet規範

Servlet 2.X

專案目錄結構必須要有WEB-INF,web.xml等資料夾和檔案,在web.xml中配置servlet,filter,listener,以web.xml為java web專案的統一入口。

Servlet 3.x

專案中可以不需要WEB-INF,web.xml等資料夾和檔案,在沒有web.xml檔案的情況下,通過註解實現servlet,filter,listener的宣告,當使用註解時,容器自動進行掃描。

8.5版本特點

Tomcat8.5進行了大量的程式碼重構,對比與7.0的版本,也符合Tomcat未來的程式碼架構體系。但是Tomcat的核心和主體架構還是一直保持這樣的。

  • 支援Servlet3.1
  • 預設採用NIO,移除BIO
  • 支援NIO2(AIO)
  • 支援HTTP/2協議
  • 預設採用非同步日誌處理

為什麼要使用8.5的版本,首先這個版本比較新,因為太老的版本比如6.0的版本Servlet不支援3所以會導致部署SpringBoot等專案有問題,同時這個版本是在9.0出現以後釋出的一箇中間版本,主體架構延續8.0,同時又實現了部分9.0的新特性。

Tomcat啟動

Tomcat 下載

Tomcat下載地址:https://tomcat.apache.org/download-80.cgi

img

一般啟動

startup.bat 啟動 Tomcat

  1. 通常下載解壓版即可,解壓後可以直接使用,安裝版使用不靈活。
  2. 直接到 %Tomcat_HOME%/bin 目錄下面執行 startup.bat ( linux 中是 startup.sh )檔案即可開啟 Tomcat,預設埠 8080,瀏覽器輸入 localhost:8080 即可訪問。
  3. 這樣做的好處是能直接從視窗中實時的看到專案中所有輸出的內容,以及丟擲的異常與錯誤等,適合於除錯階段
  4. Windws 系統中可以將 startup.bat 建立快捷方式,然後放到啟動資料夾中,這樣就會開機自起。

img

啟動日誌如下

img

啟動成功可以訪問到的Tomcat首頁 http://localhost:8080/

img

為什麼有這個預設首頁:Tomcat“買一送一”的思想。預設Tomcat啟動後加載webapps中的專案

img

IDEA中啟動

IDEA中配置Tomcat
  1. 點選Run—EDit Configurations…

img

  1. 點選左側“+”號,找到Tomcat Server—Local

若是沒有找到Tomcat Server 可以點選最後一行 34 items more

img

  1. 在Tomcat Server -> Unnamed -> Server -> Application server專案下,點選 Configuration ,找到本地 Tomcat 伺服器,再點選 OK按鈕。

img

IDEA釋出專案
  1. 點選Deployment選項卡配置需要釋出的服務

img

  1. 選擇需要釋出的war

img

  1. 然後點選ok就可以了

img

  1. 執行專案

img

  1. 然後就可以通過瀏覽器訪問頁面了

img

嵌入式啟動

SpringBoot中一個main方法嵌入式啟動Tomcat

COPY@SpringBootApplication
@Import(MybatisConfig.class)
public class AdminApplication {
    //相當於啟動了Tomcat的8080埠
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }
}

img

Tomcat關閉

第一種:Ctrl+C鍵 關閉Tomcat伺服器 第二種:點選Tomcat視窗的右上角關閉按鈕 (暴力停止伺服器) 第三種:找到tomcat目錄/bin/shutdown.bat檔案,雙擊執行關閉Tomcat。

Tomcat專案部署

隱式部署

直接丟資料夾、war、jar到webapps目錄,tomcat會根據資料夾名稱自動生成虛擬路徑,簡單,但是需要重啟Tomcat伺服器,包括要修改埠和訪問路徑的也需要重啟。

顯式部署

新增context元素

在Tomcat的conf目錄下的server.xml中的Host加入一個Context(指定路徑和檔案地址)

COPY<Context path="/test" docBase="D:/work/spring_mvc_test.war" />

img

即/test這個虛擬路徑對映到了D:/work/spring_mvc_test目錄下(war會解壓成檔案),修改完servler.xml需要重啟tomcat 伺服器。

建立xml檔案

在Tomcat的conf/Catalina/localhost中建立xml檔案,訪問路徑為檔名

在localhost目錄下新建demo.xml

COPY<Context docBase="D:/work/spring_mvc_test" />

不需要寫path,虛擬目錄就是檔名demo,path預設為/demo,新增demo.xml不需要重啟 tomcat伺服器。

三種方式比較

  • 隱式部署:可以很快部署,需要人手動移動Web應用到webapps下,在實際操作中不是很人性化
  • 新增context元素 : 配置速度快,需要配置兩個路徑,如果path為空字串,則為預設配置,每次修改server.xml檔案後都要重新啟動Tomcat伺服器,重新部署.
  • 建立xml檔案:伺服器後臺會自動部署,修改一次後臺部署一次,不用重複啟動Tomcat伺服器,該方式顯得更為智慧化。

本文由傳智教育博學谷狂野架構師教研團隊釋出。

如果本文對您有幫助,歡迎關注點贊;如果您有任何建議也可留言評論私信,您的支援是我堅持創作的動力。

轉載請註明出處!