Tomcat 教程之快速入門

版本說明

本文使用 Tomcat 版本為 Tomcat 8.5.24。Tomcat 8.5 要求 JDK 版本為 1.7 以上。

簡介

Tomcat 是什麼

Tomcat 是由 Apache 開發的一個 Servlet 容器,實現了對 Servlet 和 JSP 的支持,並提供了作為Web伺服器的一些特有功能,如Tomcat管理和控制平臺、安全域管理和Tomcat閥等。

由於 Tomcat 本身也內含了一個 HTTP 伺服器,它也可以被視作一個單獨的 Web 伺服器。但是,不能將 Tomcat 和 Apache HTTP 伺服器混淆,Apache HTTP 伺服器是一個用 C 語言實現的 HTTP Web 伺服器;這兩個 HTTP web server 不是捆綁在一起的。Tomcat 包含了一個配置管理工具,也可以通過編輯XML格式的配置文件來進行配置。

Tomcat 重要目錄

  • /bin - Tomcat 腳本存放目錄(如啟動、關閉腳本)。 *.sh 文件用於 Unix 系統; *.bat 文件用於 Windows 系統。
  • /conf - Tomcat 配置文件目錄。
  • /logs - Tomcat 默認日誌目錄。
  • /webapps - webapp 運行的目錄。

web 工程發布目錄結構

一般 web 項目路徑結構

|-- webapp # 站點根目錄
|-- META-INF # META-INF 目錄
| `-- MANIFEST.MF # 配置清單文件
|-- WEB-INF # WEB-INF 目錄
| |-- classes # class文件目錄
| | |-- *.class # 程序需要的 class 文件
| | `-- *.xml # 程序需要的 xml 文件
| |-- lib # 庫文件夾
| | `-- *.jar # 程序需要的 jar 包
| `-- web.xml # Web應用程序的部署描述文件
|-- <userdir> # 自定義的目錄
|-- <userfiles> # 自定義的資源文件

webapp:工程發布文件夾。其實每個 war 包都可以視為 webapp 的壓縮包。

META-INF:META-INF 目錄用於存放工程自身相關的一些信息,元文件信息,通常由開發工具,環境自動生成。

WEB-INF:Java web應用的安全目錄。所謂安全就是客戶端無法訪問,只有服務端可以訪問的目錄。

/WEB-INF/classes:存放程序所需要的所有 Java class 文件。

/WEB-INF/lib:存放程序所需要的所有 jar 文件。

/WEB-INF/web.xml:web 應用的部署配置文件。它是工程中最重要的配置文件,它描述了 servlet 和組成應用的其它組件,以及應用初始化參數、安全管理約束等。

安裝

前提條件

Tomcat 8.5 要求 JDK 版本為 1.7 以上。

進入 Tomcat 官方下載地址 選擇合適版本下載,並解壓到本地。

Windows

添加環境變數 CATALINA_HOME ,值為 Tomcat 的安裝路徑。

進入安裝目錄下的 bin 目錄,運行 startup.bat 文件,啟動 Tomcat

Linux / Unix

下面的示例以 8.5.24 版本為例,包含了下載、解壓、啟動操作。

# 下載解壓到本地
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz
tar -zxf apache-tomcat-8.5.24.tar.gz
# 啟動 Tomcat
./apache-tomcat-8.5.24/bin/startup.sh

啟動後,訪問 http://localhost:8080 ,可以看到 Tomcat 安裝成功的測試頁面。

配置

本節將列舉一些重要、常見的配置項。詳細的 Tomcat8 配置可以參考 Tomcat 8 配置官方參考文檔 。

Server

Server 元素表示整個 Catalina servlet 容器。

因此,它必須是 conf/server.xml 配置文件中的根元素。它的屬性代表了整個 servlet 容器的特性。

屬性表

Service

Service元素表示一個或多個連接器組件的組合,這些組件共享一個用於處理傳入請求的引擎組件。Server 中可以有多個 Service。

屬性表

實例 - conf/server.xml 配置文件示例

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8080" shutdown="SHUTDOWN">
<Service name="xxx">
...
</Service>
</Server>

Executor

Executor表示可以在Tomcat中的組件之間共享的線程池。

屬性表

<Service name="xxx">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="300" minSpareThreads="25"/>
</Service>

Connector

Connector代表連接組件。Tomcat 支持三種協議:HTTP/1.1、HTTP/2.0、AJP。

屬性表

以下屬性在標準的Connector(NIO, NIO2 和 APR/native)中有效:

Context

Context元素表示一個Web應用程序,它在特定的虛擬主機中運行。每個Web應用程序都基於Web應用程序存檔(WAR)文件,或者包含相應的解包內容的相應目錄,如Servlet規範中所述。

屬性表

Engine

Engine元素表示與特定的Catalina服務相關聯的整個請求處理機器。它接收並處理來自一個或多個連接器的所有請求,並將完成的響應返回給連接器,以便最終傳輸回客戶端。

屬性表

Host

Host元素表示一個虛擬主機,它是一個伺服器的網路名稱(如「www.mycompany.com」)與運行Tomcat的特定伺服器的關聯。

屬性表

Cluster

由於在實際開發中,我從未用過Tomcat集羣配置,所以沒研究。

啟動

部署方式

這種方式要求本地必須安裝 Tomcat 。

將打包好的 war 包放在 Tomcat 安裝目錄下的 webapps 目錄下,然後在 bin 目錄下執行 startup.batstartup.sh ,Tomcat 會自動解壓 webapps 目錄下的 war 包。

成功後,可以訪問 localhost:8080/xxx (xxx 是 war 包文件名)。

注意

以上步驟是最簡單的示例。步驟中的 war 包解壓路徑、啟動埠以及一些更多的功能都可以修改配置文件來定製 (主要是 server.xmlcontext.xml 文件)。

嵌入式

API 方式

在 pom.xml 中添加依賴

<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.24</version>
</dependency>

添加 SimpleEmbedTomcatServer.java 文件,內容如下:

import java.util.Optional;
import org.apache.catalina.startup.Tomcat;

public class SimpleTomcatServer {
private static final int PORT = 8080;
private static final String CONTEXT_PATH = "/javatool-server";

public static void main(String[] args) throws Exception {
// 設定 profile
Optional<String> profile = Optional.ofNullable(System.getProperty("spring.profiles.active"));
System.setProperty("spring.profiles.active", profile.orElse("develop"));

Tomcat tomcat = new Tomcat();
tomcat.setPort(PORT);
tomcat.getHost().setAppBase(".");
tomcat.addWebapp(CONTEXT_PATH, getAbsolutePath() + "src/main/webapp");
tomcat.start();
tomcat.getServer().await();
}

private static String getAbsolutePath() {
String path = null;
String folderPath = SimpleEmbedTomcatServer.class.getProtectionDomain().getCodeSource().getLocation().getPath()
.substring(1);
if (folderPath.indexOf("target") > 0) {
path = folderPath.substring(0, folderPath.indexOf("target"));
}
return path;
}
}

成功後,可以訪問 localhost:8080/javatool

說明

本示例是使用 org.apache.tomcat.embed 啟動嵌入式 Tomcat 的最簡示例。這個示例中使用的是 Tomcat 默認的配置,但通常,我們需要對 Tomcat 配置進行一些定製和調優。為了載入配置文件,啟動類就要稍微再複雜一些。這裡不想再貼代碼,有興趣的同學可以參考:示例項目

使用 maven 插件啟動(不推薦)

不推薦理由:這種方式啟動 maven 雖然最簡單,但是有一個很大的問題是,真的很久很久沒發布新版本了(最新版本發布時間:2013-11-11)。且貌似只能找到 Tomcat6 、Tomcat7 插件。

使用方法

在 pom.xml 中引入插件

<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/${project.artifactId}</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>

運行 mvn tomcat7:run 命令,啟動 Tomcat。

成功後,可以訪問 localhost:8080/xxx (xxx 是 ${project.artifactId} 指定的項目名)。

IDE 插件

常見 Java IDE 一般都有對 Tomcat 的支持。

以 Intellij IDEA 為例,提供了 Tomcat and TomEE Integration 插件(一般默認會安裝)。

使用步驟

  • 點擊 Run/Debug Configurations > New Tomcat Server > local ,打開 Tomcat 配置頁面。
  • 點擊 Confiure... 按鈕,設置 Tomcat 安裝路徑。
  • 點擊 Deployment 標籤頁,設置要啟動的應用。
  • 設置啟動應用的埠、JVM 參數、啟動瀏覽器等。
  • 成功後,可以訪問 http://localhost:8080/(當然,你也可以在 url 中設置上下文名稱)。

說明

個人認為這個插件不如 Eclipse 的 Tomcat 插件好用,Eclipse 的 Tomcat 插件支持對 Tomcat xml 配置文件進行配置。而這裡,你只能自己去 Tomcat 安裝路徑下修改配置文件。

資料

  • Tomcat 官方網站
  • Tomcat Wiki
  • Tomee 官方網站
  • Creating a Web App with Bootstrap and Tomcat Embedded

推薦

文中的嵌入式啟動示例可以參考我的示例項目

作者:靜默虛空

來源:慕課網

本文原創發佈於慕課網 ,轉載請註明出處,謝謝合作


推薦閱讀:
相關文章