Tomcat 服務器學習和使用(一)

原文:JavaWeb 學習總結(二)——Tomcat 服務器學習和使用(一)

一、Tomcat 服務器端口的配置

Tomcat 的所有配置都放在 conf 文件夾之中,裏面的 server.xml 文件是配置的核心文件。

如果想修改 Tomcat 服務器的啓動端口,則可以在 server.xml 配置文件中的 Connector 節點進行的端口修改。

例如:將 Tomcat 服務器的啓動端口由默認的 8080 改成 8081 端口。

Tomcat 服務器啓動端口默認配置

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

將 Tomcat 服務器啓動端口修改成 8081 端口

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

這樣就把原來默認 Tomcat 默認的的 8080 端口改成了 8081 端口了,需要注意的是,一旦服務器中的 *.xml 文件改變了,則 Tomcat 服務器就必須重新啓動,重新啓動之後將重新讀取新的配置信息。因爲已經在 server.xml 文件中將 Tomcat 的啓動端口修改成了 8081,所以 Tomcat 服務器啓動時就以 8081 端口啓動了,如下圖所示:

img

訪問 Tomcat 服務器也必須以新的訪問端口去訪問:http://localhost:8081/,如下圖所示:

img

二、Tomcat 服務器虛擬目錄的映射方式

Web 應用開發好後,若想供外界訪問,需要把 Web 應用所在目錄交給 Web 服務器管理,這個過程稱之爲虛似目錄的映射。那麼在 Tomcat 服務器中,如何進行虛擬目錄的映射呢?總共有如下的幾種方式:

2.1、虛擬目錄的映射方式一:在 server.xml 文件的 host 元素中配置

找到 server.xml 文件的 host 元素,如下圖所示:

img

<Host></Host>這對標籤加上<Context path="/JavaWebApp" docBase="F:\JavaWebDemoProject" />即可將在 F 盤下的 JavaWebDemoProject 這個 JavaWeb 應用映射到 JavaWebApp 這個虛擬目錄上,JavaWebApp 這個虛擬目錄是由 Tomcat 服務器管理的,JavaWebApp 是一個硬盤上不存在的目錄,是我們自己隨便寫的一個目錄,也就是虛擬的一個目錄,所以稱之爲“虛擬目錄”,代碼如下:

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

         <Context path="/JavaWebApp" docBase="F:\JavaWebDemoProject" />
 </Host>

其中,Context 表示上下文,代表的就是一個 JavaWeb 應用,Context 元素有兩個屬性,

Ⅰ.path:用來配置虛似目錄,必須以/開頭。

Ⅱ.docBase:配置此虛似目錄對應着硬盤上的 Web 應用所在目錄。

使用瀏覽器訪問/JavaWebApp這個虛擬目錄下的 1.jsp 這個 Web 資源,訪問結果如下:

img

1.jsp 可以正常訪問,這說明我們已經成功地將將在 F 盤下的 JavaWebDemoProject 這個 JavaWeb 應用映射到 JavaWebApp 這個虛擬目錄上了,訪問/JavaWebApp/1.jsp就相當於訪問F:\JavaWebDemoProject\1.jsp

注意:在 Tomcat6 之後中,不再建議在 server.xml 文件中使用配置 context 元素的方式來添加虛擬目錄的映射,因爲每次修改 server.xml 文件後,Tomcat 服務器就必須要重新啓動後才能重新加載 server.xml 文件。在 Tomcat 服務器的文檔 http://localhost:8080/docs/config/context.html 中有這樣的說明:

It is NOT recommended to place <Context> elements directly in the server.xml file. This is because it makes modifying the Context configuration more invasive since the main conf/server.xml file cannot be reloaded without restarting Tomcat.

Individual Context elements may be explicitly defined:

  • In an individual file at /META-INF/context.xml inside the application files. Optionally (based on the Host's copyXML attribute) this may be copied to $CATALINA_BASE/conf/[enginename]/[hostname]/ and renamed to application's base file name plus a ".xml" extension.
  • In individual files (with a ".xml" extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory. The context path and version will be derived from the base name of the file (the file name less the .xml extension). This file will always take precedence over any context.xml file packaged in the web application's META-INF directory.
  • Inside a Host element in the main conf/server.xml.

2.2、虛擬目錄的映射方式二:讓 Tomcat 服務器自動映射

Tomcat 服務器會自動管理 webapps 目錄下的所有 Web 應用,並把它映射成虛似目錄。換句話說,Tomcat 服務器 webapps 目錄中的 Web 應用,外界可以直接訪問。

例如:把 F 盤下的 JavaWebDemoProject 這個 JavaWeb 應用直接 copy 到 Tomcat 服務器 webapps 目錄中,如下圖所示:

img

此時 Tomcat 服務器就會自動爲 JavaWebDemoProject 這個 JavaWeb 應用映射一個同名的虛擬目錄/JavaWebDemoProject,然後就可以使用瀏覽器訪問這個 JavaWeb 應用的資源了,如下圖所示:

img

2.3、虛擬目錄的映射方式三

參考 Tomcat 服務器文檔:

In individual files (with a ".xml" extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory. The context path and version will be derived from the base name of the file (the file name less the .xml extension). This file will always take precedence over any context.xml file packaged in the web application's META-INF directory.

意思就是:在 Tomcat 服務器的 \conf\Catalina\localhost 目錄下添加一個以 xml 作爲擴展名的文件,xml 文件的名字可以任意取,比如下面的 aa.xml,注意這一句話“The context path and version will be derived from the base name of the file”,這一句話的意思翻譯過來就是“context 元素的 path 屬性源自於是這個 xml 文件的名字”,上面提到過,Context 元素的 path 屬性是用來配置虛似目錄的名稱的,所以虛似目錄的名稱就是這個 xml 文件的名稱。

$CATALINA_BASE指的就是 Tomcat 服務器根目錄,[enginename]指的是 Tomcat 服務器使用的引擎名稱,Tomcat 使用的引擎是 Catalina。

img

在 aa.xml 文件中添加 Context 元素映射 JavaWeb 應用,代碼如下:

<Context docBase="F:\JavaWebDemoProject" />

注意:在 Context 元素中並沒有指明 path 屬性來設置虛擬目錄的名稱,那麼F:\JavaWebDemoProject映射的虛擬目錄名稱是什麼呢,就是當前正在編輯的這個 xml 文件的名稱 aa。

img

使用這種方式映射虛擬目錄的最大好處是修改了配置文件後不用重啓 Tomcat 服務器,比如將 aa.xml 修改成 bb.xml,Tomcat 服務器會自動 Undeploying context [/aa],然後自動 Deploying configuration descriptor D:\apache-tomcat-7.0.53\conf\Catalina\localhost\bb.xml:

img

三、Tomcat 服務器配置虛似主機

3.1、配置虛擬主機

配置虛似主機就是配置一個網站。

在 Tomcat 服務器配置一個虛擬主機 (網站),需要修改 conf 文件夾下的 server.xml 這個配置文件,使用 Host 元素進行配置,打開 server.xml,可以看到 Tomcat 服務器自帶的一個名稱爲 localhost 的虛擬主機 (網站),如下圖所示:

img

平時我們將開發好的 JavaWeb 應用放到 webapps 文件夾下,然後就可以使用http://localhost:端口號/JavaWebAppName的方式去訪問了,其實訪問的就是 name 是“localhost”的那臺虛擬主機 (Host),這臺虛擬主機管理 webapps 文件夾下的所有 Web 應用。

例如:http://localhost:8080/JavaWebDemoProject/1.jsp,這個 URL 地址訪問的就是名稱是 localhost 的那臺虛擬主機下的 JavaWebDemoProject 這個應用裏面的 1.jsp 這個 Web 資源。

我們可以使用如下的方式配置一個虛擬主機,例如:

<Host name="www.gacl.cn" appBase="F:\JavaWebApps">
      
</Host>

這裏我們新配置一個虛擬主機,虛擬主機的 name 是“www.gacl.cn”,虛擬主機“www.gacl.cn”現在管理着 JavaWebApps 文件夾下的所有 Web 應用,平時我們在互聯網上使用域名“www.baidu.com”訪問百度的網站時,其實就是在訪問一個名稱是“www.baidu.com”的虛擬主機,所以當我們要訪問 name 是“www.gacl.cn”的這個虛擬主機時,就可以使用“域名(www.gacl.cn)”去訪問,注意一下appBase="F:\JavaWebApps",這裏的 JavaWebApps 文件夾代表的不是一個項目的根目錄,而是一個存放了一個或者多個 JavaWeb 應用的文件夾,如下圖所示:

img

就好像是 Tomcat 服務器的 webapps 文件夾一樣,裏面存放了很多的 JavaWeb 應用。

img

3.2、Windows 系統中註冊域名

配置的主機 (網站) 要想通過域名被外部訪問,必須在 DNS 服務器或 Windows 系統中註冊訪問網站時使用的域名,找到“C:\Windows\System32\drivers\etc”目錄下的 hosts 文件,如下圖所示:

img

編輯這個文件,將新添加的網站的域名和 IP 地址綁定在一起,這樣我們就可以在瀏覽器中使用 www.gacl.cn 這個域名去訪問 name 是 www.gacl.cn 那個虛擬主機裏面管理的那些 Web 應用了。

img

使用瀏覽器通過域名“www.gacl.cn”訪問“www.gacl.cn”這個虛擬主機下的 JavaWebDemo1 這個 Web 應用下的 1.jsp 這個 Web 資源,“www.gacl.cn”這個虛擬主機開放了一個 8080 端口,用戶只能通過這個 8080 端口去訪問 JavaWebDemo1 這個 Web 應用下的 1.jsp 這個 Web 資源。

img

四、瀏覽器與服務器交互的過程

4.1、瀏覽器與服務器交互圖

img

當我們打開瀏覽器,在瀏覽器的地址欄中輸入 URL 地址http://www.gacl.cn:8080/JavaWebDemo1/1.jsp去訪問服務器上的 1.jsp 這個 Web 資源的過程中,瀏覽器和服務器都做了什麼操作呢,我們是怎麼在瀏覽器裏面看到 1.jsp 這個 Web 資源裏面的內容的呢?

瀏覽器和服務器做了以下幾個操作:

1、瀏覽器根據主機名“www.gacl.cn”去操作系統的 Hosts 文件中查找主機名對應的 IP 地址。

2、瀏覽器如果在操作系統的 Hosts 文件中沒有找到對應的 IP 地址,就去互聯網上的 DNS 服務器上查找“www.gacl.cn”這臺主機對應的 IP 地址。

3、瀏覽器查找到“www.gacl.cn”這臺主機對應的 IP 地址後,就使用 IP 地址連接到 Web 服務器。

4、瀏覽器連接到 Web 服務器後,就使用 http 協議向服務器發送請求,發送請求的過程中,瀏覽器會向 Web 服務器以 Stream (流) 的形式傳輸數據,告訴 Web 服務器要訪問服務器裏面的哪個 Web 應用下的 Web 資源,如下圖所示:

img

這就是瀏覽器向 Web 服務器發請求時向服務器傳輸的數據,解釋一下“GET /JavaWebDemo1/1.jsp HTTP/1.1”這裏面的內容:

GET:告訴 Web 服務器,瀏覽器是以 GET 的方式向服務器發請求。

/JavaWebDemo1/1.jsp:告訴 Web 服務器,瀏覽器要訪問 JavaWebDemo1 應用裏面的 1.jsp 這個 Web 資源。

HTTP/1.1:告訴 Web 服務器,瀏覽器是以 HTTP 協議請求的,使用的是 1.1 的版本。

5、瀏覽器做完上面 4 步工作後,就開始等待,等待 Web 服務器把自己想要訪問的 1.jsp 這個 Web 資源傳輸給它。

6、服務器接收到瀏覽器傳輸的數據後,開始解析接收到的數據,服務器解析“GET /JavaWebDemo1/1.jsp HTTP/1.1”裏面的內容時知道客戶端瀏覽器要訪問的是 JavaWebDemo1 應用裏面的 1.jsp 這個 Web 資源,然後服務器就去讀取 1.jsp 這個 Web 資源裏面的內容,將讀到的內容再以 Stream (流) 的形式傳輸給瀏覽器,如下圖所示:

img

這個就是 Web 服務器傳輸給瀏覽器的數據。

7、瀏覽器拿到服務器傳輸給它的數據之後,就可以把數據展現給用戶看了,如下圖所示:

img

看到的這個“JavaWebDemo1”就是瀏覽器解析服務器發送回來的數據後的效果

服務器發送回來的數據:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 102
Date: Mon, 19 May 2014 14:25:14 GMT

<html>
    <head>
        <title>JavaWebDemo1</title>
    </head>
    <body>
        JavaWebDemo1
    </body>
</html>

這就是瀏覽器和服務器的交互過程。

五、JavaWeb 應用的組成結構

開發 JavaWeb 應用時,不同類型的文件有嚴格的存放規則,否則不僅可能會使 Web 應用無法訪問,還會導致 Web 服務器啓動報錯。

img

WebRoot →Web 應用所在目錄,一般情況下虛擬目錄要配置到此文件夾當中。

┝WEB-INF:此文件夾必須位於 WebRoot 文件夾裏面,而且必須以這樣的形式去命名,字母都要大寫。

┝web.xml:配置文件,有格式要求,此文件必須以這樣的形式去命名,並且必須放置到 WEB-INF 文件夾中。

web.xml 的格式可以直接從 Tomcat 中參考得到:找到 Tomcat 目錄下的 webapps\ROOT\WEB-INF 這個目錄下的 web.xml 文件,把這個文件拷貝到我們新建的 WEB-INF 文件夾中,並修改這個 web.xml 文件,把裏面的註釋刪除掉,只留下如下所示的代碼即可:

web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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_2_5.xsd"
   version="2.5">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>

</web-app>

這就是 web.xml 這個文件的格式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章