1. 程式人生 > >Web服務器之Tomcat的相關說明(Web訪問中的角色與協議問題和JavaWeb項目的程序結構問題)

Web服務器之Tomcat的相關說明(Web訪問中的角色與協議問題和JavaWeb項目的程序結構問題)

b/s架構 c/s架構 context.xml說明 server.xml說明 javaweb項目的程序結構

1、C/S架構和B/S架構的概念:

a、C/S架構:

- C/S,Client/Server,客戶端/服務器,客戶端需要安裝專用的客戶端軟件。客戶端是針對某以具體業務專門開發的軟件。

- 由於客戶端是專用的軟件,所以客戶端程序一般也具有對具體業務進行處理的能力。從而減輕對服務端的處理壓力,使得服務端的運算速度更快,對客戶端的響應更快。

- 也正是由於客戶端是需要專門安裝的專用軟件,所以導致C/S架構的系統也出現了致命的問題:版本升級成本異常地高。無論是由於客戶端軟件本身功能的升級,或者是由於服務端的升級導致客戶端也必須進行升級,無論什麽原因導致客戶端需要升級,每一個客戶端機器上都必須先獲取到新版本軟件,再將老版本進行卸載替換。C/S架構系統的每一次客戶端升級,都需要企業為之付出人力、物力和財力上的成本代價。


b、B/S架構:

- B/S,Browser/Server,瀏覽器/服務器。B/S架構,其實也是一種特殊的C/S架構,只不過,這個Client特指的是瀏覽器。

- 對於B/S架構的系統,需要客戶端安裝有瀏覽器,那麽客戶端就可以訪問服務器。而整個系統的升級,只需要升級服務器端程序即可。所以,B/S架構的系統最大的優點就是不存在客戶端升級問題。

- 由於客戶端不是專門針對某一具體業務而設計,是一個通用的客戶端,所以客戶端幾乎沒有任何對具體業務進行處理運算的能力。而對於具體業務的處理壓力,全部加在了服務端,從而導致服務器程序運算速度降低,對客戶端的響應速度降低,影響了客戶體驗。

- 另外,B/S架構系統還存在一個問題:瀏覽器兼容問題。雖然客戶端只需要一個瀏覽器即可訪問服務端,但由於現在瀏覽器品牌、版本很多,而其實現技術千差萬別,所以導致服務端需要想辦法兼容各種瀏覽器版本。這無形中又增加了服務器端的壓力。


2、Web訪問中的角色與協議:

- Web訪問中的角色與協議示意圖:(角色有4個,瀏覽器,Web服務器,服務器端程序和DB;協議有3個,HTTP協議,Servlet協議,JDBC協議。)

技術分享

- 所謂協議,即是規範、規則,是通信雙方事先的約定。

- HTTP協議要求,通行雙方,即瀏覽器與服務器雙方,都需要按照指定的格式發出請求與響應。對方按照協議,即事先的約定,對對方發送來的信息進行解析。

- Servlet協議要求,若程序員要開發完成某一個具體業務的服務端程序,則必須實現Servlet接口,使用ServletAPI進行數據傳遞。

- JDBC協議要求,服務器端程序若要連接並操作數據庫,則需要按照JDBC協議中的規定的方式(接口方法)獲取DB連接,進行SQL的執行、進行結果的獲取。而JDBC協議(接口)的實現,均由數據庫廠商來完成。放於數據庫廠商提供的數據庫驅動jar包即可。所以,我們連接不同的數據庫,就需要導入不同的數據庫驅動jar包。

- 此外,還有JavaEE協議:Servlet協議是JavaEE協議裏的一部分。JavaEE協議即進行JavaWeb開發的一套API,除了包含Servlet協議外,JSTL協議、JPA協議等。目前使用較多的版本是JavaEE5.0。JavaEE5.0包含的是Servlet2.5協議。JavaEE6.0包含的是Servlet3.0協議。而Servlet2.5與Servlet3.0版本的一個很大的區別在於:Servlet3.0支持對Servlet、Filter、Listener類的註解式開發。


3、Web服務器之Tomcat的相關說明:

a、Tomcat的簡單認識:

- 實際應用中實現了JavaEE規範的Web瀏覽器有很多,如Oracle的WebLogic(需購買)、IBM的WebSphere(需購買)、RedHat公司的JBoss(不支持Servlet規範,開源免費)等,這些都稱為重量級服務器。

- Apache的Tomcat(Apache軟件基金會的一個開源項目,可以在其官網http://www.apache.org/中下載),只是JavaEE規範中Servlet/JSP規範的實現者(也包括EL和WebSocket協議 ),所以其實是一個輕量級的服務器,它是開源免費的。Tomcat也稱之為Web容器,或者是Servlet容器,但是不能夠稱之為JavaEE容器。

- 官網中的Tomcat9.0安裝包和源碼包下載圖片截取:

技術分享


- 引申出的一個概念:JCP(官網為http://jcp.org),Java Community Process,Java審核社區,是一個開放的國際組織,主要負責規範、監督Java的發展,其他個人、企業、機構等制定的Java規範,必須通過JCP審核後,才能夠被認定為Java規範,JCP的創始者為SUN公司。

b、Tomcat的安裝與目錄結構:

- Tomcat的安裝,即將其解壓縮包即可,無需向導式的安裝過程。解壓縮後可以對Tomcat的根目錄更名。

c、Tomcat的運行環境配置:

- Tomcat安裝完畢後,需要安裝JDK或者JRE。對於Tomcat5以及以前版本,要求必須安裝JDK,而對於Tomcat6及其之後版本可以只安裝JRE而不需要安裝JDK。

- 在安裝JDK時配置系統環境變量JAVA_HOME,將其bin目錄添加到path變量即可。(Tomcat不需要其他配置)

技術分享

技術分享

- 如果沒有配置系統環境變量,則在命令行中會顯示如下錯誤:

技術分享


d、Tomcat的啟動和訪問:

- 在設置完前面的環境變量之後,Tomcat即可進行啟動。

- 進入命令行窗口的Tomcat目錄的bin目錄下,執行startup.bat命令,即可看到Tomcat的啟動過程。當然,也可以在Window窗口中,找到Tomcat目錄的bin目錄,直接雙擊startup.bat文件啟動Tomcat。(shutdown.bat文件為關閉Tomcat)

- 可以通過在瀏覽器地址欄上鍵入localhost:8080來訪問Tomcat。

技術分享

技術分享


4、JavaEE規範要求JavaWeb項目的程序結構是:

- 在當前應用所在目錄中可以直接存放資源文件,如.html、.jpg等,也可以將其放入到子目錄中訪問。

- 若Web項目中包含Serlvet代碼,則Servlet的字節碼文件必須存放在當前應用所在子目錄/WEB-INF/classes中。

- 在/WEB-INF/下可以包含web.xml配置文件,定義請求URI與所要訪問的Serlvet間的映射關系、指定歡迎頁面等。

- 在/WEB-INF下可以包含子目錄lib,用於存放當前Web應用所使用的外部jar包。

- 在/WEB-INF/目錄中的資源不能被瀏覽器直接訪問。

- 如下所示:

--- 項目根目錄

---html、jsp、js、css、jpg等資源文件

---子目錄

---相關資源文件

---WEB-INF

---classes

---lib

---web.xml

---html、jsp等資源文件


5、解讀server.xml文件:

- Tomcat服務器是由一系列可配置的組件構成,Tomcat的組件可以在<CALTALINA_HOME>(即Tomcat安裝的根目錄)/conf/server.xml文件中進行配置,每個Tomcat組件和server.xml文件中的一種配置元素向對應,下面就一些常用的元素做介紹:

a、<Server>元素:代表整個Catalina Servlet容器,它是Tomcat實例的頂層元素,可以包含一個或者多個<Service>元素。

b、<Service>元素--不同端口部署不同應用則復制多個Service。(包含一個<Engine>元素,以及一個或者多個<Connection>元素,這些<Connection>元素共享一個<Engine>元素。)

c、<Connector>元素:代表和客戶程序實際交互的組件,它負責接收客戶請求,以及向客戶返回響應結果。

d、<Engine>元素--虛擬主機:每個<Service>元素只能包含一個<Engine>元素、<Engine>元素處理在同一個<Service>中所有<Connector>元素接收到的客戶請求。

e、<Host>元素:一個<Engine>元素中可以包含多個<Host>元素,每個<Host>元素定義了一個虛擬主機,它可以包含一個或者多個Web應用。

f、<Context>元素--同一端口部署多個應用則復制多個Context:每個 <Context>元素代表運行虛擬主機上的單個Web應用,一個<Host>元素中可以包含多個<Context>元素。

- 在tomcat中的server.xml元素詳解:

技術分享


6、Tomcat中的context.xml說明、Context標簽講解:

a、在tomcat5.5之前:Context體現在/conf/server.xml中的Host裏的<Context>元素中,它由Context接口定義。每個<Context>元素代表了運行在虛擬主機上的單個Web應用。

- server.xml文件,如<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true"> 。

- path表示要創建的虛擬目錄,它指定訪問Web應用的上下文根,如http://localhost:8080/kaka/...;docBase:為應用程序的路徑或者WAR文件存放的路徑,可以是絕對路徑,也可以是相對路徑(相對路徑是相對於<Host>)。

- reloadable:如果這個屬性設置為true,Tomcat服務器在運行狀態下會監視在WEB-INF/classes和WEB-INF/lib目錄class文件的改變,如果監視到有class文件被更新,服務器自動重新加載Web引用,這樣我們可以在不重啟tomcat的情況下改變應用程序。

- 一個Host元素中嵌套任意多個的Context元素。每個Context的路徑必須是唯一的,由path屬性定義。另外,你必須定義一個path=""的Context,這個Context稱之為該虛擬主機的缺省web應用,用來處理那些不能夠匹配任何Context的Context路徑的請求。


b、在tomcat5.5之後:

- 不推薦在server.xml中進行配置,而是在/conf/context.xml中進行獨立的配置。因為server.xml是不可動態重加載的資源,服務器一旦啟動以後,要修改這個文件,就得重新啟動服務器才能夠重新加載。而context.xml文件則不然,tomcat服務器會定時去掃描這個文件。一旦發現文件被修改(時間戳改變),就會自動重新加載這個文件,而不需要重啟服務器。

- 如下所示:

<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/kaka.xml</WatchedResource> 監控資源文件,如果web.xml || kaka.xml改變了,則自動重新加載該應用。
<Resource name="jdbc/testSiteds" 表示指定的jdbc名稱
auth="Container" 表示認證方式,一般為Container
type="javax.sql.DataSource"
maxActive="100" 連接池支持的最大連接數
maxIdle="30" 連接池中最多可空閑maxIdle個連接
maxWait="10000" 連接池中連接用完時,新的請求等待時間,毫秒
username="root" 表示數據庫用戶名
password="root" 表示數據庫用戶的密碼
driverClassName="com.mysql.jdbc.Driver" 表示JDBC DRIVER
url="jdbc:mysql://localhost:3306/testSite" /> 表示數據庫URL地址
</Context>


c、附錄:context.xml的三個作用範圍:

- tomcat server級別:在/conf/context.xml裏配置。

- Host級別:在/conf/Catalina/${webAppName}.xml,繼而進行配置。

- web app級別:在/conf/Catalina/$(hostName}裏添加${webAppName}.xml,繼而進行配置。




本文出自 “12392717” 博客,請務必保留此出處http://12402717.blog.51cto.com/12392717/1972421

Web服務器之Tomcat的相關說明(Web訪問中的角色與協議問題和JavaWeb項目的程序結構問題)