使用Tomcat構建web站點

1.1.web應用的前置知識

①.HTTP協議

web瀏覽器除了可以在本地硬盤上打開網頁文檔外,還可以使用HTTP網絡協議從網絡上web服務器上獲取網頁文檔內容

如圖:


web瀏覽器和web服務器分別代表着TCP網絡程序的客戶端和服務端。可以把web服務器想象成網絡上的一塊硬盤,網頁文檔就放在那塊硬盤裏,web瀏覽器從遠程的網絡硬盤中讀取數據遠比讀取本地的數據複雜的多,因爲它與web服務器間需要一問一答的交互過程。但是既然是交互,那就要一個交互的規則,就像一個只會說英語和一個既會說漢語又會說英語的外交官對話時,他們一定會選擇用英語對話,只有遵守了這樣的規則,他們的交互才能持續,這個規則就是HTTP協議。因爲web瀏覽器會按照HTTP協議的規定向web服務器發送請求,web服務器也會按照HTTP協議的規定向瀏覽器響應請求。

②.URL

放置在網絡上的服務器中的網頁文檔都應該有一個定位標識,用於唯一性的標識它的位置,也就是地址,只有有了地址,web瀏覽器定位到它。

③.web服務器

Apache、IIS、Tomcat等,但是Apache和IIS不直接支持JSP/Servlet程序。要想在這些web服務器中運行,就必須要與某種JSP/Servlet引擎進行集成,Tomcat是sun公司推薦的運行JSP/Servlet的容器(引擎),它可以被集成到Apache和IIS中。另外,Tomcat也有web服務器的一些功能,對於一般的應用,完全可以使用Tomcat作爲web服務器運行。

④.網站系統的組成

通常來說,只要在一臺機器上安裝了web服務器軟件,從功能上講,這臺機器就是一個web服務器。對於一個大型的網站系統來說,通常有區域代理服務器、負載均衡’web服務器、應用服務器、緩存、數據庫系統等組成。簡單的網站,只需要一個web服務器就夠了。


1.2.配置web站點的虛擬根目錄

        ①.概述

一個web資源的URL中的資源路徑部分,www.zhangpeng.com/project/index.html,其中"/project/index.html"就是由web服務器的某個本地目錄中的資源所映射成的虛擬路徑。"/project/index.html"的第一個"/"表示站點的根目錄,它對應到web服務器的本地文件系統的一個目錄。"/project/"表示站點根目錄下的一個名叫"project"的子目錄,"/project/index.html"可理解爲子目錄"project"下的名爲"index.html"的文件。

要想讓瀏覽器通過HTTP協議訪問到某臺計算機中的目錄內容,除了這臺計算機必須有web服務器軟件外,還要將該目錄映射成虛擬的web站點目錄。將web服務器(即web服務器軟件所在的計算機)的本地文件系統的某個目錄映射成虛擬web站點目錄的過程,叫發佈。

②.虛擬web目錄的映射原理

一個web站點上必須有且只能有一個虛擬根目錄,其他的虛擬目錄必須以根目錄子孫目錄的形式出現,根目錄用"/"表示,根目錄與該目錄下的子目錄或者資源文件都以"/"進行分隔。假設將d:\test目錄映射成web站點的根目錄,那麼瀏覽器訪問的資源路徑與本地文件系統的對應關係,如圖:

一個web站點除了可以設置一個虛擬根目錄外,還可以設置若干個虛擬子目錄。一個文件系統目錄可以被映射成一個或者多個虛擬web目錄,但是一個虛擬的web目錄只能對應一個本地文件系統目錄。虛擬web子目錄名稱可以是多級目錄結構的形式。例如本地文件系統上的"D:/project"可以映射成"/serv/index"的虛擬web子目錄。當瀏覽器請求某個路徑的資源時,Tomcat會按照最長路徑匹配原則進行處理。

1.3.設置web站點的根目錄

兩種方式

①.<Tomcat主目錄>/webapps/ROOT目錄可以自動的映射成虛擬根目錄,在建立自己的web站點時,可以先刪除Tomcat提供的ROOT目錄下的原始內容,然後將自己想要提供給外部訪問的資源複製到ROOT目錄下。

②.打開<Tomcat>主目錄/conf/server.xml文件,找到<context>元素,這個元素用於將本地文件系統中的一個目錄映射成一個可供web瀏覽器訪問的虛擬web目錄。其中,path用來指定web虛擬目錄的路徑,當設置爲空時,表示的是整個web站點的根目錄;docbase指定該虛擬web目錄所映射到的本地文件系統的目錄,可以使用絕對路徑和相對於<Tomcat主目錄>/webapps的相對目錄。

<context   path=""  docbase="D:/project"/> 相當於把D:/project目錄配置成web站點的根目錄。
將web服務器上某個文件系統的目錄映射成web站點的根目錄後,就可以使用瀏覽器來訪問這個目錄及其子目錄下的資源了。

1.3.配置web站點的虛擬子目錄  

①.打開<Tomcat>主目錄/conf/server.xml文件,設置<context>元素,一個<Host>元素表示一個web站點,其中可以包含多個<contedxt>元素,每個<context>子元素分別對應該站點下的一個虛擬web目錄。<context>元素指定的虛擬web子目錄名稱與本地文件系統的目錄名稱沒有必然的關聯,兩者的名稱可以不一致,例如,<Tomcat主目錄>/conf/server.xml文件中的<Host>下增加一條<context path="/zhangpeng" docbase="D:/zpeng512" />,即可將本地計算機下的D:/zpeng512映射成web站點的虛擬w子目錄。一個虛擬目錄,就是一個獨立的web應用程序。爲了便於web應用程序的發佈,通常將一個web應用程序打成一個war包。server.xml文件中的<context>元素的docbase除了指向一個目錄外,它還可以指向一個war文件。

②.如果<Host>元素指定的appbase目錄<默認爲<Tomcat主目錄/webapps目錄>>中的xml文件中包含<context>元素的設置,這和直接包含在server.xml文件中的<Host>中的效果是一樣的。

③.<Tomcat主目錄>/conf/Catalina/localhost/路徑名.xml

④.如果<Host>中appbase指定的目錄下的子目錄中包含WEB-INF/web.xml文件,這些子目錄將會自動被設置成獨立的web應用程序,其虛擬路徑就是在該子目錄的名稱前面加上"/"。

1.4.部署描述符(web.xml)

一個web虛擬目錄就是一個獨立的web程序,每個web應用程序都有獨立的web配置的信息,每個web應用的配置信息都保存在各自所映射的文件系統目錄下的"WEB-INT/web.xml"中。web.xml用於web應用程序部署信息,因此叫做部署描述符。由於每個web應用程序都有相同的配置特性,爲了避免在每個web應用中重複設置這些特性,Tomcat在conf/web.xml文件中設置了對所有web應用起作用的配置信息,也就是所有web應用默認的配置信息,每個web應用的web.xml用於在tomcat下conf/web.xml的基礎上增加或者覆蓋一些設置信息,一個web應用程序中的web.xml只對web應用程序自己有效。

1.5.配置虛擬主機

①.瀏覽器訪問web資源的過程

瀏覽器訪問web資源時,會根據協議名、IP(主機)、端口等信息與web服務器建立網絡連接。由於主機名比IP更容易記憶,人們通常在URL中使用主機名,而不是IP地址。主機名會被DNS解析成IP地址,再通常IP地址與web服務器建立連接。

②.虛擬主機及實現原理

在一臺機器上可以使用tomcat創建多個web站點,併爲每個web站點設置不同的虛擬根目錄和虛擬子目錄,每個web站點作爲各自獨立的網站分配給不同的公司或部門。通過這種方式,各個公司或部門可以共用同一臺服務器,而用戶感覺每個公司或部門都有各自獨立的網站。多個沒有實力的在Internet上架設自己的web服務器的公司可以聯合租用同一臺web服務器,對外提供各自的web服務而互不影響,這就是虛擬主機的解決方案。因爲多個虛擬主機的web站點是創建在同一臺web服務器中的,不管web瀏覽器訪問哪一個站點,請求都會發送到這臺服務器中,那麼這臺服務器是怎麼區分這個請求是請求的哪一個站點呢?這就需要考慮兩個因素:一.web服務器的每個站點必須設置不同的標識信息;二.web瀏覽器發出連接請求中必須包含web站點的標識信息。

虛擬主機分爲:基於主機名的虛擬主機和基於端口號的虛擬主機。

配置:

 <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
 
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<span style="white-space:pre">		</span>
      </Host><span style="white-space:pre">	</span>  
<span style="white-space:pre">	</span>
    </Engine>
  </Service>
  
   <Service name="Catalina2">
  


    <Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <Engine name="Catalina2" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/> 
<span style="white-space:pre">		</span><!--如果docBase的路徑是相對於appBase的,那麼沒必要配置虛擬子目錄,因爲appBase下的目錄都會被自動映射成虛擬子目錄-->
      <Host name="localhost"  appBase="D:/mkmk"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<span style="white-space:pre">			</span><Context  path="/zhangp5"    docBase="/mk"  />
      </Host>
<span style="white-space:pre">	</span>  <Host name="www.zp.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<span style="white-space:pre">		</span><Context  path="/zhangp4"    docBase="D:/mkmk/mk"  />
<span style="white-space:pre">		</span><Context  path="/zhangp5"    docBase="/mk"  />
<span style="white-space:pre">		</span>
      </Host><span style="white-space:pre">	</span>  <span style="white-space:pre">	</span>  
    </Engine>
  </Service>






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