1. 程式人生 > >【WEB】TOMCAT介紹

【WEB】TOMCAT介紹

TOMCAT

基本操作

  • 檢視版本:進入Library - Tomcat - bin目錄,輸入 sh version.sh,檢視Server number: 9.0.13.0
  • 開啟:進入Library - Tomcat - bin目錄,輸入 ./startup.sh (若Permission denied,賦予超級管理員許可權sudo chmod 755 *.sh,再次./startup.sh
  • 檢視:瀏覽器輸入 http://localhost:8080/
  • 關閉:進入Library - Tomcat - bin目錄,輸入 ./shutdown.sh
  • 於IDEA上配置:Finder欄 - Run - Edit Configuration;左上角點選新增"+" - Tomcat Server - Local;第一步,輸入配置的Tomcat的Name,第二步,點選配置Tomcat:Configuration,第三步,在彈出的Application Servers中配置Tomcat Home(Library - Tomcat)和Library( - bin);Apply。

介紹

  • 是由 Apache 開發的一個Servlet 容器,實現了對 Servlet 和 JSP 的支援,並提供了作為Web伺服器的一些特有功能,如Tomcat管理和控制平臺、安全域管理和Tomcat閥等。他可以執行你按照J2EE中的Servlet規範編寫好的Java程式。
  • 簡單的說它是一個Web網站的執行容器,把你寫好的網站放進去就可以執行。
  • 由於 Tomcat 本身也內含了一個 HTTP 伺服器,它也可以被視作一個單獨的 Web 伺服器。但是,不能將 Tomcat 和 Apache HTTP 伺服器混淆,Apache HTTP 伺服器是一個用 C 語言實現的 HTTP Web 伺服器;這兩個 HTTP web server 不是捆綁在一起的。Tomcat 包含了一個配置管理工具,也可以通過編輯XML格式的配置檔案來進行配置。
  • Apache只支援靜態網頁html,tomcat支援jsp動態網頁。
  • Tomcat是應用(java)伺服器,它只是一個servlet容器,是Apache的擴充套件,處理動態網頁部分。

安裝

  • 下載:官網有壓縮包 https://tomcat.apache.org/download-90.cgi ,下載解壓放入電腦盤(建議Library)(為求方便,此時把檔名改成了"Tomcat");
  • 配置:設定檔案的讀寫執行許可權。開啟Ter輸入 sudo chmod 755 /Library/Tomcat/bin/*.sh 回車(這裡需要輸入管理員密碼);(sudo為系統超級管理員;755 代表使用者對該檔案擁有讀,寫,執行的許可權;同組其他人員擁有執行和讀的許可權,沒有寫的許可權,其他使用者的許可權和同組人員許可權一樣;777代表,user,group ,others ,都有讀寫和可執行許可權。)

在這裡插入圖片描述

Tomcat - logs - CATALINA

logs資料夾存放Tomcat 的日誌檔案,開啟logs資料夾,可以看到裡面的log檔案,其中有一個以"catalina.yyyy-MM-dd.log"形式命名的log檔案,例如"catalina.2014-05-17.log"日誌檔案就是記錄Tomcat伺服器2014-05-17這一天的執行情況。
在這裡插入圖片描述

在這裡插入圖片描述

日誌資訊裡面清楚的記錄了Tomcat伺服器的執行情況,如果因為8080埠被佔用而無法正常啟動,就會記錄如上圖所示的異常資訊,通過檢視異常資訊,我們就可知道Tomcat伺服器為什麼不能夠正常啟動了!

總結:當Tomcat伺服器無法正常啟動時,首先檢查是否配置了JAVA_HOME環境變數,然後再檢查Tomcat伺服器啟動時的埠是否被別的應用程式佔用了。

TOMCAT 伺服器埠的配置

TOMCAT - conf - servel.xml

Tomcat的所有配置都放在conf資料夾之中,裡面的server.xml檔案是配置的核心檔案
如果想修改Tomcat伺服器的啟動埠,則可以在server.xml配置檔案中的Connector節點進行的埠修改

在這裡插入圖片描述

例如:將Tomcat伺服器的啟動埠由預設的8080改成8081埠

  • BEFORE
    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
  • AFTER
    <Connector port="8081" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

這樣就把原來預設Tomcat預設的的8080埠改成了8081埠了;
需要注意的是,一旦伺服器中的*.xml檔案改變了,則Tomcat伺服器就必須重新啟動,重新啟動之後將重新讀取新的配置資訊。因為已經在server.xml檔案中將Tomcat的啟動埠修改成了8081,所以Tomcat伺服器啟動時就以8081埠啟動了,如下圖所示:(WIN例子)
在這裡插入圖片描述

訪問Tomcat伺服器也必須以新的訪問埠去訪問:http://localhost:8081/

TOMCAT 伺服器虛擬目錄的對映方式(3種)

  • Web應用開發好後,若想供外界訪問,需要把web應用所在目錄交給web伺服器管理,這個過程稱之為虛似目錄的對映

  • 1.在server.xml檔案的host元素中配置

  • 2.讓TOMCAT伺服器自動對映

  • 3.在/conf/Catalina/localhost下自主新增.xml檔案

1.在server.xml檔案的host元素中配置

  • 找到server.xml檔案的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元素有兩個屬性,

  • 1.path:用來配置虛似目錄,必須以"/"開頭。
  • 2.docBase:配置此虛似目錄對應著硬碟上的Web應用所在目錄。
    使用瀏覽器課訪問"/JavaWebApp"這個虛擬目錄下的1.jsp這個web資源

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

It is NOT recommended to place 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.

2.讓TOMCAT伺服器自動對映

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

例如:

  • 把電腦中的JavaWebDemoProject這個JavaWeb應用直接copy到tomcat伺服器webapps目錄中;
  • 此時Tomcat伺服器就會自動為JavaWebDemoProject這個JavaWeb應用對映一個同名的虛擬目錄"/JavaWebDemoProject",然後就可以使用瀏覽器訪問這個JavaWeb應用的資源了。例如 http://localhost:8080/JavaWebDemoProject/1.jsp

3.在/conf/Catalina/localhost下自主新增.xml檔案

參考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;

在aa.xml檔案中新增Context元素對映JavaWeb應用,程式碼如下:

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

注意:在Context元素中並沒有指明path屬性來設定虛擬目錄的名稱,那麼"F:\JavaWebDemoProject"對映的虛擬目錄名稱是神馬呢,就是當前正在編輯的這個xml檔案的名稱aa。

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

Tomcat伺服器配置虛似主機(即配置一個網站)

在Tomcat伺服器配置一個虛擬主機(網站),需要修改/Library/Tomcat/conf/server.xml這個配置檔案,其中可以看到Tomcat伺服器自帶的一個名稱為localhost的虛擬主機(網站),上文中已展示圖片,使用<Host>...</Host>元素進行配置。

平時我們將開發好的JavaWeb應用放到webapps資料夾下,然後就可以使用http://localhost:埠號/JavaWebAppName的方式去訪問了。

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

<Host name="www.gacl.cn" appBase="/xxx/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="/xxx/JavaWebApps",這裡的JavaWebApps資料夾代表的不是一個專案的根目錄,而是一個存放了一個或者多個JavaWeb應用的資料夾

通過hosts在系統中註冊域名

編輯這個檔案,將新新增的網站的域名和IP地址繫結在一起,這樣我們就可以在瀏覽器中使用www.gacl.cn這個域名去訪問name是www.gacl.cn那個虛擬主機裡面管理的那些web應用了
編輯hosts方法:command+shift+G - 輸入/private/etc/hosts - 啟用editor編輯;
在這裡插入圖片描述
使用瀏覽器通過域名"www.gacl.cn"訪問"www.gacl.cn"這個虛擬主機下的JavaWebDemo1這個web應用下的1.jsp這個web資源,"www.gacl.cn"這個虛擬主機開放了一個8080埠,使用者只能通過這個8080埠去訪問JavaWebDemo1這個web應用下的1.jsp這個web資源。
例如:

瀏覽器與伺服器互動的過程

瀏覽器與伺服器互動圖
在這裡插入圖片描述

  • 伺服器傳送回來的資料:
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伺服器啟動報錯.
在這裡插入圖片描述

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

WEB-INF:此資料夾必須位於WebRoot資料夾裡,而且必須字母都要大寫

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

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

Tomcat的體系結構

Tomcat伺服器的啟動是基於一個server.xml檔案的。
Tomcat啟動的時候首先會啟動一個Server,Server裡面就會啟動Service,Service裡面就會啟動多個Connector,每一個聯結器都在等待客戶機的連線,當有使用者使用瀏覽器去訪問伺服器上面的web資源時,首先是連線到Connector,Connector是不處理使用者的請求的,而是將使用者的請求交給一個Engine去處理**(Engine首先對接Client的請求)**,Engine接收到請求後就會解析使用者想要訪問的Host,然後將請求交給相應的Host,Host收到請求後就會解析出使用者想要訪問這個Host下面的哪一個Web應用,一個web應用對應一個Context。

參考部落格:
http://www.cnblogs.com/xdp-gacl/p/3729033.html
https://www.cnblogs.com/xdp-gacl/p/3744053.html