1. 程式人生 > >詳解Tomcat配置及使用

詳解Tomcat配置及使用

1. 初識Tomcat

此處以 Tomcat 7.0.88版本為例。

1.1 啟動

進入bin目錄,在點選startup.bat啟動時,如果視窗一閃而過,啟動失敗,一般是因為環境變數沒有設定好。

設定:
JAVA_HOME 為 JDK安裝路徑。

Tomcat就可以根據JAVA_HOME找到JDK,然後啟動了。(Tomcat依賴於java)

1.2 關閉

同樣的,bin目錄中可以點選shutdown.bat將其關閉,如果關閉失敗,一般是因為環境變數沒有設定好。

設定:
CATALINA_HOME 為 Tomcat安裝路徑。

這個環境變數能夠讓Tomcat在該變數所配置的目錄來啟動。

注意!如果本機安裝了多個Tomcat,不論點選誰的startup.bat,啟動的都是CATALINA_HOME
變數所指向的Tomcat。因為該原因,一般也不推薦配置這個環境變數。

1.3 配置埠

進入conf目錄,編輯server.xml配置檔案。

找到下面這段配置:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

可以將port的值修改為80,這樣下次啟動就訪問瀏覽器localhost即可,因為瀏覽器的預設埠就是80

1.4 關於端口占用問題

使用命令:

netstat -ano
可以找到佔用埠的程序pid,再進入工作管理員,將對應pid的程序關閉。 如果沒有找到pid,在屬性顯示欄右鍵勾選pid,即可看到。

2. Tomcat目錄結構

bin —— 存放啟動和關閉Tomcat的指令碼檔案。
conf —— 存放Tomcat伺服器的各種配置檔案。
lib —— 存放Tomcat伺服器的支撐jar包。
logs —— 存放Tomcat的日誌檔案。
temp —— 存放執行時產生的臨時檔案。
webapps —— web應用所在目錄,供外界訪問的web資源的存放目錄。
work —— Tomcat的工作目錄。

3. 虛擬主機配置

3.1 什麼是虛擬主機

虛擬主機:

由於在Tomcat中可以執行多個站點,使用者用瀏覽器訪問Tomcat伺服器中的每個站點的時候,就像在訪問各自獨立的伺服器一樣。

所以我們可以說,各個站點是分別執行在Tomcat這個真實伺服器上的一臺虛擬主機上。

簡而言之:

一個Tomcat中可以配置多臺虛擬主機,一個虛擬主機上可以執行一個網站。

一個網站就可以認為是一臺虛擬主機。

3.2 什麼是web應用

一個虛擬主機上的很多web資源,按照功能類別組織成一個個的web應用,再交給虛擬主機管理,並提供給使用者訪問。

3.3 如何配置web應用

當我們完成了一個web應用後,所有的該應用資源全部放在一個資料夾中,比如news,如何讓虛擬主機去識別這個資料夾,並管理呢?

我們進入到conf目錄的server.xml中,可以看到有這麼一段配置:

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

這就是Tomcat初始自帶的一個虛擬主機localhost,並且外部訪問所有應用資源所在的根目錄是webapps

Host元素中的Context元素,代表web應用。

關於context元素的屬性:

- docBase: 
    指定web應用程式的文件基目錄或者WAR檔案的路徑名。可以是絕對路徑也可以是相對於appBase的路徑名。

- path:
    指定web應用程式的上下文路徑。

- unpackWAR:
    如果為true,Tomcat在執行web程式前將展開所有壓縮的web應用程式,預設值是true。

配置web應用給虛擬主機:

方法一:

在Server.xml的<Host>標籤中,新增<Context/>標籤,就可以為該虛擬主機配置一個web應用了。

<Context path="/news" docBase="E:\news" />

虛擬路徑對映:

path是虛擬路徑,docBase是真實路徑。

當URL中輸入localhost/news,實際上是去系統的E:\news下尋找資源。

預設web應用的配置:

即預設的web應用,當不寫web應用路徑時,預設訪問的就是這個應用。

<Context path="" docBase="E:\news" />

注意,修改完這些配置後,伺服器都需要重啟,這種方式不是很好。

方法二:

Tomcat/conf/Catalina/[Host] 目錄下寫一個xml檔案,其中,xml檔案的名字就是虛擬路徑,在這個xml中可以新增標籤,再在其中配置真實路徑。

如:conf/Catalina/localhost/news.xml的配置:

<?xml version="1.0" encoding="utf-8"?>
<Context docBase="E:\news" />

然後就可以在瀏覽器中通過localhost/news/...來訪問news應用裡的資源了。

這種修改方式不需要重啟伺服器,稍微等待即可看到效果。

注意,如果虛擬路徑中有”/”,由於檔名不允許包含”/”,需要用”#”代替。

如果需要設定為預設應用,該如何操作?

只需要將 conf/Catalina/localhost/news.xml 中的news.xml名稱修改為ROOT.xml,即可通過localhost/...直接訪問應用資源了。

方法三:

這是最為簡單的一種方式。

直接將web應用放置到虛擬主機管理的目錄下,虛擬主機就可以找到這個web應用,從而對其進行管理。

news為例:

直接將news資料夾放到 Tomcat/webapps 下,即可通過localhost/news/...訪問該應用資源。

如何設定預設應用?

只要將web應用資料夾的名稱改為ROOT,這個web應用就是預設應用。

3.4 web應用目錄結構

如果web應用的目錄結構不合法,可能會出現各種問題。

news
|-- 
|-- WEB-INF 
    |-- classes 
    |-- lib 
    |-- web.xml 

①:靜態資源和JSP檔案都可以直接放置在web應用的目錄下,瀏覽器可以直接訪問到。

②:這個資料夾可以沒有,但最好有,如果有則一定要保證其目錄結構完整。放置在WEB-INF目錄下的所有資源瀏覽器沒有辦法直接進行訪問。

③:動態web資源執行時的java類class檔案要放在這個目錄下。

④:動態web資源執行時所依賴的jar包要放在這個目錄下。

⑤:整個web應用的配置檔案,配置主頁/Servlet的對映/過濾監聽器的配置都需要依賴這個檔案進行。

當直接訪問localhost時,預設是獲取預設web應用目錄下的index.html檔案。

可以在WEB-INFweb.xml中設定主頁的指向:

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">

  <welcome-file-list>
    <welcome-file>
        hello.html
    </welcome-file>
  </welcome-file-list>

</web-app>

這樣當訪問localhost時,會自動獲取hello.html內容。

3.5 配置虛擬主機

在conf/server.xml中<Engine>標籤下新增一個<Host>標籤,就可以新增一臺虛擬主機了。

name —— 指定虛擬主機的名稱,瀏覽器通過這個名稱訪問虛擬主機。

appBase —— 虛擬主機管理的目錄,放置在這個目錄下的web應用,虛擬主機可以自動載入。

由於瀏覽器訪問地址時,需要將地址翻譯成對應的ip才能找到伺服器,這其中翻譯的過程是由dns伺服器來實現的,我們沒辦法修改dns伺服器,此時可以修改hosts檔案來模擬DNS功能。

預設虛擬主機

如果來訪者通過ip地址來訪問,這個時候伺服器無法辨別當前要訪問的是哪臺虛擬主機中的資源,會預設訪問預設虛擬主機。

預設虛擬主機可以通過在server.xmlengine標籤上的defaultHost屬性進行配置。

<Engine name="Catalina" defaultHost="localhost">

4. 一些其他的配置說明

4.1 war包

通常我們可以把一個web應用的資料夾經過命令:

jar -cvf my.war news

將news應用的資原始檔壓縮打包成 my.war,然後傳送到webapps下,war檔案會自動解壓,可以直接被訪問。

其實war就是zip,將zip檔案字尾名改一下也能達到效果。

4.2 通用的配置

conf資料夾中,有context.xmlweb.xml,這相當於一個頂級的,父級的配置檔案,在webapps中的應用配置預設也是“繼承”於這些配置檔案。

比如說,就算不給應用的web.xml中設定主頁,Tomcat也會基於頂級的配置檔案,將應用目錄中的index.html指定為主頁。

4.3 自動載入更新

context元素設定reloadable屬性為true,可以讓Tomcat自動載入更新後的web應用,當java程式修改後可以不用重啟,伺服器自動重新載入。但會降低效能。

4.4 後臺管理介面

和大多數伺服器一樣,Tomcat也有一個後臺管理的介面,我們可以通過授權進入這個GUI介面,然後方便地操作管理web應用。

manager

通過localhost/manager/html,可以進入主機內web應用的管理介面,在這之前需要在conf下的tomcat-users.xml新增管理使用者:

<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

然後用該使用者進入,管理主機上的所有web應用。