一,簡介
Tomcat是一個實現了JAVA EE標准的最小的WEB服務器,是Apache 軟件基金會的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。因為Tomcat 技術先進、性能穩定,而且開源免費,因而深受Java 愛好者的喜愛並得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。學習JavaWeb開發一般都使用Tomcat服務器,該服務器支持全部JSP以及Servlet規范,啟動界面如圖:
Tomcat的體系結構
Tomcat服務器的啟動是基於一個server.xml文件的,Tomcat啟動的時候首先會啟動一個Server,Server里面就會啟動Service,Service里面就會啟動多個"Connector(連接器)",每一個連接器都在等待客戶機的連接,當有用戶使用瀏覽器去訪問服務器上面的web資源時,首先是連接到Connector(連接器),Connector(連接器)是不處理用戶的請求的,而是將用戶的請求交給一個Engine(引擎)去處理,Engine(引擎)接收到請求后就會解析用戶想要訪問的Host,然后將請求交給相應的Host,Host收到請求后就會解析出用戶想要訪問這個Host下面的哪一個Web應用,一個web應用對應一個Context。
完整的server.xml配置文件內容:
<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/.keystore" keystorePass="123456"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>
二,下載和安裝Tomcat服務器
官方下載地址:http://tomcat.apache.org/ ,
百度雲下載(包含版本6-9):鏈接: https://pan.baidu.com/s/1nvspdd3 密碼: quww
解壓后就可以使用了
三,Tomcat目錄層次結構
四,啟動/測試Tomcat服務器
雙擊 bin 目錄下的 startup.bat 文件啟動Tomcat服務器
打開瀏覽器,輸入localhost:8080,能顯示如下界面代表安裝成功。
五,Tomcat服務器啟動常見問題
1、JAVA_HOME環境變量設置問題
要想雙擊bin目錄下的startup.bat文件啟動Tomcat服務器,首先要做的就是在windows中設置JAVA_HOME環境變量,因為Tomcat服務器的啟動需要用到這個JAVA_HOME環境變量,如果windows中不存在JAVA_HOME環境變量,則Tomcat服務器是無法啟動的。
2、端口占用問題
因為Tomcat服務器啟動時是需要默認是使用8080端口的,如果這個8080端口被別的應用程序占用了,那么Tomcat服務器就無法正常啟動,看到的現象就是"Tomcat服務器啟動界面會打印出異常錯誤信息,然后就自動關閉了",我們直接前往日志文件logs/catalina.xxxx-xx-xx.log,如圖所示:
日志信息里面清楚的記錄了Tomcat服務器的運行情況,因為8080端口被占用而無法正常啟動,就會記錄如上圖所示的異常信息,通過查看異常信息,就可知道Tomcat服務器為什么不能夠正常啟動了!
六,Tomcat服務器端口設置
在server.xml配置文件中的Connector節點進行的端口修改。例如:將Tomcat服務器的啟動端口由默認的8080改成8081端口
Tomcat服務器啟動端口默認配置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
將Tomcat服務器啟動端口修改成8081端口
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
這樣就把原來默認Tomcat默認的的8080端口改成了8081端口了,需要注意的是,一旦服務器中的*.xml文件改變了,則Tomcat服務器就必須重新啟動,重新啟動之后將重新讀取新的配置信息。因為已經在server.xml文件中將Tomcat的啟動端口修改成了8081,所以Tomcat服務器啟動時就以8081端口啟動了,如下圖所示:
七,Tomcat服務器虛擬目錄的映射方式
Web應用開發好后,若想供外界訪問,需要把web應用所在目錄交給web服務器管理,這個過程稱之為虛似目錄的映射。那么在Tomcat服務器中,如何進行虛擬目錄的映射呢?總共有如下的3種方式:
1,方式一:在server.xml文件的host元素中配置
Tomcat的logs/server.xml的文件的host元素,如下圖所示:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
在<Host></Host>這對標簽加上<Context path="/JavaWebApp" docBase="D:\JavaWebs" />即可將在D盤下的JavaWebs這個JavaWeb應用映射到JavaWebApp這個虛擬目錄上,JavaWebApp這個虛擬目錄是由Tomcat服務器管理的,JavaWebApp是一個硬盤上不存在的目錄,是我們自己隨便寫的一個目錄,也就是虛擬的一個目錄,所以稱之為"虛擬目錄",代碼如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="/JavaWebApp" docBase="D:\JavaWebs" /> </Host>
其中,Context表示上下文,代表的就是一個JavaWeb應用,Context元素有兩個屬性,
path:用來配置虛似目錄,必須以"/"開頭。
docBase:配置此虛似目錄對應着硬盤上的Web應用所在目錄。
使用瀏覽器訪問"/JavaWebApp"這個虛擬目錄下的1.jsp這個web資源,訪問結果如下:
注意:在Tomcat6之后中,不再建議在server.xml文件中使用配置context元素的方式來添加虛擬目錄的映射,因為每次修改server.xml文件后,Tomcat服務器就必須要重新啟動后才能重新加載server.xml文件。
2,方式二:讓tomcat服務器自動映射
tomcat服務器會自動管理webapps目錄下的所有web應用,並把它映射成虛似目錄。換句話說,tomcat服務器webapps目錄中的web應用,外界可以直接訪問。
例如:把D盤下的JavaWebs這個JavaWeb應用直接copy到tomcat服務器webapps目錄中,如下圖所示:
此時Tomcat服務器就會自動為JavaWebs這個JavaWeb應用映射一個同名的虛擬目錄"/JavaWebs"
后台日志:
如下圖所示:
3,方式三
在tomcat服務器的\conf\Catalina\localhost目錄下添加一個以xml作為擴展名的文件,xml文件的名字可以任意取,比如JavaWebs.xml
在JavaWebs.xml文件中添加Context元素映射JavaWeb應用,代碼如下:
<Context docBase="D:\JavaWebs" />
注意:在Context元素中並沒有指明path屬性來設置虛擬目錄的名稱,那么"F:\JavaWebs"映射的虛擬目錄名稱是什么呢,就是當前正在編輯的這個xml文件的名稱JavaWebs。
注意:使用這種方式映射虛擬目錄的最大好處是修改了配置文件后不用重啟Tomcat服務器