軟件開發工程師(JAVA)中級考試大綱之--五 J2EE WEB高級組件開發--(三)Tomcat服務器的環境及配置;應用發佈和數據源配置;

首先定義tomcat6的安裝根目錄爲 ${CATALINA_HOME}

在tomcat6版本中,context元素已經從server.xml文件中獨立出來了,放在一個context.xml文件中。因爲server.xml是不可動態重加載的資源,服務器一旦啓動了以後,要修改這個文件,就得重啓服務器才能重新加載。而context.xml文件則不然,tomcat服務器會定時去掃描這個文件。一旦發現文件被修改(時間戳改變了),就會自動重新加載這個文件,而不需要重啓服務器。我們當然推薦把應用需要的JNDI資源配置在context.xml文件中,而不是server.xml文件中。

由於context元素的可用範圍是可以控制的,我們可以根據需要爲Context元素定義不同級別的可用範圍。

一. 全局可用
全局可用的範圍意味着tomcat服務器下面的所有應用都可以使用這個context元素定義的資源。

全局可用範圍的context元素在文件 ${CATALINA_HOME}/conf/context.xml 文件中描述。這個文件在tomcat剛剛被安裝的時候,是沒有定義任何資源的。我們可以看到,這個文件的內容:
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

Context>

其中的 <watchedresource></watchedresource>WEB-INF/web.xml表示服務器會監視應用的WEB-INF/web.xml 文件來知道那個應用會引用在此處定義的資源。

二. 指定的虛擬主機可用
指定的虛擬主機可用就是說,在tomcat服務器配置的虛擬主機中,只有指定的那個虛擬主機上跑的應用才能使用。要配置一個虛擬主機可用的context資源,可以在${CATALINA_HOME}/conf/目錄下的文件 ${enginename}/${hostname}/context.xml.default 中表述。

比如,一般一個tomcat服務器安裝好了以後,都有一個默認的叫做 Catalina 的引擎,在這個引擎下有一個叫做 localhost 的虛擬主機。我們的應用一般都放在這個虛擬主機下。那麼,如果我們想要配置一個在 Catalina/localhost 虛擬主機下都可以使用的資源,我們需要在目錄 ${CATALINA_HOME}/conf 下建立路徑 Catalina/localhost,在這個路徑下創建文件 context.xml.default。全路徑是 ${CATALINA_HOME}/conf/Catalina/localhost/context.xml.default


三. 指定的應用可用
顧名思義,一個指定的應用可用的context元素,意味着這是一個只有指定的引擎,指定的虛擬主機,指定的應用纔可以使用的context元素。

如果我們用appname來代表這個指定的這個指定的應用的名字,那麼元素的定義應該被放置在 ${CATALINA_HOME}/conf/${enginename}/${hostname}/${appname}.xml文件中。

例如,假設在localhost下我們有一個web應用叫做webtest,那麼我們應該創建文件 ${CATALINA_HOME}/conf/Catalina/localhost/webtest.xml。


Tomcat6.0數據源配置
方法一:
1.配置tomcat下的conf下的context.xml文件,在之間添加連接池配置:
<Resource name="jdbc/mydb"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@localhost:1521:mydb"
       username="bmgis"
       password="bmgis"
       maxActive="100"
       maxIdle="30"
       maxWait="10000" />
2.配置你的應用下的web.xml中的之間加入:
<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/mydb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
在以往的tomcat當中還需要在web.xml指定相應的resource,在tomcat 5.5以後的版本不寫也可以,但建議還是配置。

3.把連接數據庫的第三方驅動放到${CATALINA_HOME}/lib下面就ok了
4.測試程序test.jsp如下:
<%@ page import="javax.naming.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
conn.close();
%>

 

方法二:
我們只需要在WebRoot目錄下,新建一個META-INF的目錄(假如不存在,注意目錄名稱大寫),
在該目錄下創建一個context.xml文件,並且在context.xml文件當添加以下的配置信息:
<Context>
 <Resource name="jdbc/mydb"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@localhost:1521:mydb"
       username="bmgis"
       password="bmgis"
       maxActive="100"
       maxIdle="30"
       maxWait="10000"
    logAbandoned="true" />
</Context>
其中:
name 表示指定的jndi名稱
auth 表示認證方式,一般爲Container
type 表示數據源牀型,使用標準的javax.sql.DataSource
maxActive 表示連接池當中最大的數據庫連接
maxIdle 表示最大的空閒連接數
maxWait 當池的數據庫連接已經被佔用的時候,最大等待時間
logAbandoned 表示被丟棄的數據庫連接是否做記錄,以便跟蹤
username 表示數據庫用戶名
password 表示數據庫用戶的密碼
driverClassName 表示JDBC DRIVER
url 表示數據庫URL地址

此方法二一樣適用Tomcat5.5

 

Tomcat5.5x數據源配置

方式一、全局數據庫連接池
1、通過管理界面配置連接池,或者直接在${CATALINA_HOME}/conf/server.xml的GlobalNamingResources中增加
<Resource name="jdbc/mydb" type="javax.sql.DataSource"
 username="bmgis" password="bmgis"
 driverClassName="oracle.jdbc.driver.OracleDriver"
 url="jdbc:oracle:thin:@localhost:1521:mydb"
 maxIdle="2" maxWait="5000" maxActive="4"/>
2、在${CATALINA_HOME}/webapps/myapp/META-INF/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
這樣就可以了。

方式二、全局數據庫連接池
1、同上
2、在${CATALINA_HOME}/conf/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
方式三、局部數據庫連接池
只需在${CATALINA_HOME}/webapps/myapps/META-INF/context.xml的Context中增加:
<Resource name="jdbc/mydb" type="javax.sql.DataSource"
 username="bmgis" password="bmgis"
 url="jdbc:oracle:thin:@localhost:1521:mydb"
 driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
 maxIdle="2" maxWait="5000" maxActive="4"/>


擴展 Tomcat虛擬主機的配置 

虛擬主機是使用特殊的軟硬件技術,把一臺計算機主機分成一臺臺虛擬的主機,每一臺虛擬主機都具有獨立的域名和 IP 地址(或共享的 IP 地址)有完整的 Internet 服務器(WWWFTPEmail等)功能。利用虛擬主機技術,每一臺虛擬主機和一臺獨立的主機完全一樣,每一臺虛擬主機都具有獨立的域名,具有完整 Internet 服務器功能。

Tomcat 支持虛擬主機技術,不需要額外的插件,而且配置簡單。


一 準備

我們將配置兩臺虛擬主機,假設域名分別爲
  www.sentom1.net
  www.sentom2.net
爲了測試方便,請在客戶機的:
  Win2K:\\WINNT\system32\drivers\etc\hosts
  Linux:/etc/hosts
文件中增加下面內容,然後檢查一下這兩個域名是否解析正確。
 192.168.0.1 www.sentom1.net
 192.168.0.1 www.sentom2.net
當然,在生產環境中這樣做是不行的,需要的在 DNS 上做相應的域名解析。

二 Tomcat安裝

Tomcat的安裝不在本文的討論範圍。請確保Tomcat安裝正確,不然請不要繼續進行下面的配置步驟。

將 tomcat 目錄下的 webapps 目錄在同一目錄複製一份,目錄名分爲 webapps2 ,然後將 webapps 目錄改名爲 webapps1 。最後 tomcat 的目錄結構大致如下:

 tomcat
 |--bin
 |--common
 |--conf
 |--logs
 |--server
 |--shared ......
 |--webpapps1
 |--webpapps2
 |--work

最後,寫一個簡單 html 文件用於測試,文件名爲 test.html ,文件內容如下:你現在訪問的是 www.sentom1.net
將 test.html 文件分別在 tomcat/webapps1/ROOTtomcat/webapps2/ROOT 目錄放置一份,然後將 tomcat/webapps2/ROOT/test.html 文件內容中www.sentom1.net改爲www.sentom2.net

至此,前期的準備工作做完了。

三 配置虛擬主機

前面提到了獨立 IP 和共享的 IP。本文介紹的是共享的 IP 模式,這種模式就是所有的虛擬主機都使用同一IP 。目前國內IDC 提供的虛擬主機都是這種模式。這種模式的優點是節約數量有限的IP ,缺點就是虛擬主機只能通過域名訪問而不能通過IP 訪問(其實也不算是缺點,只對郵件系統中用戶的訪問方式有一點點影響 )。而另外一種獨立 IP 模式主要應用在郵件服務中,這裏就不做介紹了。

配置 www.sentom1.net 虛擬主機

打開 tomcat/conf/server.xml 文件,將 Host 元素之間的內容全部刪掉,然後把下面內容加如到 Host 元素原來的位置。

name="www.sentom1.net“ debug=0“ appBase=webapps1“ unpackWARs=true“ autoDeploy=true

配置 www.sentom2.net 虛擬主機

將下面內容追加到 Host 元素後面,注意 Host 元素中 name 屬性和 appBase 屬性的值的變化。
 name="www.sentom2.net“ debug=0“ appBase=webapps2“ unpackWARs=true“ autoDeploy=true

現在可以啓動 Tomcat 了,分別訪問 http://www.sentom1.net:8080/test.htmlhttp://www.sentom2.net:8080/test.html
如果訪問得到的頁面內容分別是下面的內容,那表明虛擬主機已經配置成功了。否則,請檢查你的配置過程並重新按照文檔配置。



一、網站系統的組成

只要在一臺計算機上安裝了WEB服務器軟件,從功能上講,這臺計算機就可以稱爲WEB服務器。一個網站的規模可大可小,功能可多可少,最簡單的網站只需要一臺Web服務器即可對外提供網頁瀏覽服務。複雜的網站包括多臺WEB服務器組成的羣集系統、負載均衡設備、具有緩存功能的代理服務器(可以有多級,甚至包括放置在服務器端的緩存系統)、數據庫系統等,如圖所示。


www.sina.com網站系統採用的基本上就是圖2.2所示的架構,不同地區的人們在訪問www.sina.com站點時,瀏覽器實際上所訪問的服務器是不一樣的,例如,吉林省的用戶訪問的服務器實際是sina放在吉林地區的代理服務器,湖北省的用戶訪問的服務器實際是sina放在湖北地區的代理服務器。各地區的瀏覽器訪問www.sina.com站點的過程如下圖所示。



爲了能夠讓瀏覽器透明地訪問到WEB站點,讓用戶感覺不到是在訪問區域代理服務器,在DNS系統中需要將www.sina.com主機名指向所有的區域代理服務器的IP地址。在瀏覽器訪問www.sina.com站點中的頁面而向DNS服務器請求解析www.sina.com主機名時,DNS服務器根據訪問者的地理位置信息返回他附近的區域代理服務器的IP地址,這樣,瀏覽器的訪問請求將發送給該區域代理服務器。只有當區域代理服務器中沒有瀏覽器要訪問的頁面時,區域代理服務器纔去從真正的www.sina.com站點服務器上獲取該頁面並進行緩存,以後該區域的其他瀏覽器就都可以就近從區域代理服務器中訪問到該頁面了,從而大大提高了訪問效率和減少了網絡流量。

WEB瀏覽器與WEB服務器建立連接後,除了將請求URL中的資源路徑發送給WEB服務器外,還會將URL中的主機名部分作爲HTTP請求消息的Host頭髮送給WEB服務器。例如,在瀏覽器地址欄中輸入http://www.it315.org,瀏覽器發送給www.it315.org主機上的WEB服務器的請求消息內容如下:

      GET / HTTP/1.1<回車>

      Host: www.it315.org<回車>

      <回車>

WEB服務器接收到瀏覽器的訪問請求消息後,根據Host頭字段中所設置的主機名,就知道該選擇哪個WEB站點來進行響應,因此,可以使用不同的主機名來作爲區分同一個WEB服務器上的不同站點的標識信息。


TomcatServer.xml配置文件中有一個<Host>元素,一個<Host>元素用於建立一個WEB站點,使用多個<Host>元素則可以建立多個WEB站點。<Host>元素的父級元素爲<Engine>元素,嵌套在同一個<Engine>元素中的多個<Host>元素的name屬性不能相同,<Host>元素的name屬性指定WEB站點所對應的主機名稱。TomcatServer.xml配置文件中初始設置的<Host>元素內容如下:

<Host appBase="webapps" …>

</Host>

<Host>元素中的appBase屬性指定了一個路徑,該路徑將作爲嵌套在它裏面的<Context>元素的docBase屬性中設置的相對路徑的基準路徑。

Tomcat接收到訪問請求時,將比較請求消息中的Host頭字段的值與<Host>元素的name屬性值,並以匹配的<Host>元素所創建的WEB站點來響應。如果Server.xml文件中沒有與請求消息的Host頭字段匹配的<Host>元素,Tomcat將以默認的WEB站點來響應。只要<Engine>元素的defaultHost屬性設置爲嵌套在它裏面的某個<Host>元素的name屬性值,該<Host>元素所創建的WEB站點就成了該引擎的默認WEB站點。例如,TomcatServer.xml文件中的<Engine>元素的默認設置如下:

<Engine defaultHost="localhost" debug="0">

      <Host name="localhost" appBase="webapps" …>

      …

      </Host>

</Engine>

上面的這段配置信息說明,該引擎的默認WEB站點爲嵌套在<Engine>元素中的name屬性爲localhost<Host>元素所創建的WEB站點。

在同一臺計算機上建立了多個基於主機名的虛擬主機後,WEB瀏覽器要訪問其中的某個虛擬主機的資源時,在訪問URL中必須採用主機名,而不能採用IP地址。這是因爲WEB瀏覽器要將URL中的主機名部分作爲HTTP請求消息的Host頭髮送給WEB服務器,如果URL中的主機名部分使用的是IP地址,那麼,瀏覽器發出的請求消息中的Host頭字段的值就是這個IP地址,而在同一臺計算機上建立的多個基於主機名的虛擬主機共享同一個IP地址,在Host頭字段使用IP地址根本就無法區分不同的站點。

即使在URL中指定的是主機名時,WEB瀏覽器還是要先獲得該主機名所對應的IP地址,然後再使用這個IP去連接WEB服務器。所以,在建立基於主機名的虛擬主機時,除了要在Tomcatserver.xml文件中進行設置外,還需要在整個網絡系統中建立主機名與IP地址的映射關係,即必須將主機名添加到名稱解析系統,以便WEB瀏覽器能夠從名稱解析系統中查詢出主機名所對應的IP地址。建立主機名與IP地址的映射關係的慣用方式有兩種:一是使用客戶機本地的Hosts文件,二是使用DNS(Domain Name System,域名系統)服務器。Hosts文件和DNS的作用都是允許用戶使用友好的、文本格式的主機名稱,而不是數字格式的IP地址來訪問網絡中的計算機。Hosts文件可用於小型的Intranet(企業內部網),網絡中的所有計算機上都需要使用Hosts文件。DNS通常用於大型的網絡,特別是Internet上對外提供服務的計算機都是通過DNS來建立其主機名與IP地址的映射關係。客戶機首先在本地的Hosts文件中查找主機名稱所映射的IP地址,如果沒有找到,再去查詢DNS服務器。爲了簡單起見,這裏僅介紹一下Hosts文件。對於Windows 2000系統,Hosts文件位於操作系統根目錄(取決操作系統所在的分區,通常是c:\winnt)下的System32\Drivers\Etc子目錄中,默認情況下,該文件中有如下一行內容:

      127.0.0.1      localhost

這行文本的作用就是將IP地址(127.0.0.1)映射成主機名(localhost),這也就是在IE瀏覽器地址欄中可以使用localhost訪問本地WEB服務器的原因。如果要增加更多的主機名與IP地址的映射,可以在Hosts文件中增加更多的行,然後參照上面這行內容的格式在每行中填寫IP地址和相應的主機名。

:動手體驗:使用Tomcat建立基於主機名的虛擬主機

1)用UltraEdit打開<Tomcat主目錄>/conf目錄下的Server.xml文件,使用查找菜單查找內容爲</Host>的行,緊接該行下面增加一對<Host></Host>標籤。參照前面的<Host>標籤的屬性設置情況,設置新增的<Host>標籤的屬性,並在它裏面嵌套一個設置該WEB站點根目錄的<Context>元素,最終的內容如下:

      <Host name="site1" debug="0" appBase="d:\VirtualHost1">

             <Context path="" docBase="." debug="0"/>

      </Host>

這樣,將創建一個新的WEB站點。上面的<Context>元素的docBase屬性值被設置爲一個點(.),即表示使用<Host>元素的appBase屬性中所設置的路徑作爲這個<Context>所映射的目錄。

2)在上面新增的<Host></Host>標籤對下面再增加一對<Host></Host>標籤,並將它設置爲如下形式:

      <Host name="site2" debug="0" appBase="d:\VirtualHost2">

             <Context path="" docBase="." debug="0"/>

      </Host>

這又創建了一個新的WEB站點,該站點的主機名稱爲site2,根目錄對應的本地文件系統目錄爲d:\VirtualHost2

3)在d:盤下創建名稱爲VirtualHost1VirtualHost2兩個目錄,並在這兩個目錄中分別創建一個名爲test.html的文件,在d:\VirtualHost1\test.html文件中寫入如下一行內容:

   這是d:\VirtualHost1目錄中的test.html文件

d:\VirtualHost2\test.html文件中寫入如下一行內容:

   這是d:\VirtualHost2目錄中的test.html文件

4)保存修改後的Server.xml文件,重新啓動Tomcat WEB服務器程序。打開一個新的命令行窗口中,並在這個命令行窗口中執行如下命令:

telnet 127.0.0.1 8080

接着在連接成功的telnet程序命令窗口中,輸入如下內容:

      GET /test.html HTTP/1.1<回車>

      Host:<空格>site1<回車>

      <回車>

這時在telnet程序窗口中可以看到,WEB服務器返回內容的正文部分爲d:\VirtualHost1\test.html文件中的內容。接着WEB服務器返回內容的下邊,輸入如下內容:

      GET /test.html HTTP/1.1<回車>

      Host:<空格>site2<回車>

      <回車>

telnet程序窗口中又可以看到,WEB服務器這次返回內容的正文部分爲d:\VirtualHost2\test.html文件中的內容。接着WEB服務器返回內容的下邊,輸入如下內容:

      GET /test.html HTTP/1.1<回車>

      Host:<空格><回車>

      <回車>

telnet程序窗口中又可以看到,WEB服務器這次返回內容的正文部分爲d:\test\test.html文件中的內容。接着WEB服務器返回內容的下邊,再次輸入如下內容:

      GET /test.html HTTP/1.1<回車>

      Host:<空格>xxx<回車>

      <回車>

telnet程序窗口中又可以看到,WEB服務器這次返回內容的正文部分仍然爲d:\test\test.html文件中的內容。

上面的整個交互過程如圖2.34所示,Tomcat根據第1次和第2次請求中所指定Host頭的值,查找Server.xml文件中與之相匹配的<Host>元素的name屬性值,並以匹配的<Host>元素所設置的WEB站點來響應;在第3次和第4次請求中所指定Host頭的值,在Server.xml文件中沒有與之對應的<Host>元素的name屬性值,Tomcat將以默認的WEB站點來響應。

 

 








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