Web服務器之Tomcat的相關說明(Web訪問中的角色與協議問題和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項目的程序結構問題)