為啥要重學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下載地址:http://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服務器,該方式顯得更為智能化。

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

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

轉載請註明出處!