tomcat的安裝與web專案部署到tomcat的使用
一、Tomcat8的下載
http://tomcat.apache.org/download-80.cgi
二、Tomcat配置
解壓tomcat到當前的檔案
TOMCAT環境變數配置
TOMCAT_HOME : D:\apache-tomcat-7.0.63
Path : %TOMCAT_HOME%\bin
以上即可,不影響tomcat的使用
詳細的配置也可以配置為
(1)變數名: CATALINA_BASE 變數值: D:\apache-tomcat-7.0.63(Tomcat解壓到的目錄)
(2)變數名: CATALINA_HOME 變數值:D:\apache-tomcat-7.0.63
(3)變數名: CATALINA_TMPDIR 變數值:D:\apache-tomcat-7.0.63\temp
(4)變數名: Path 變數值:D:\apache-tomcat-7.0.63\bin
執行Tomcat8,“開始”->“執行”->輸入cmd,在命令提示符中輸入 startup.bat,之後會彈出tomcat命令框,輸出啟動日誌;開啟瀏覽器輸入http://localhost:8080/ ,如果進入tomcat歡迎介面,那麼恭喜你,配置成功。
三、Eclipse中整合tomcat
在eclipse的欄目選單中點選window-preferences 搜尋server 找到Runtime Envirement中 點選Add
選擇對應tomcat的版本
找到解壓的tomcat路徑
建立 Servers,如果找不到 Servers,則選擇 Window--->Show View--->Others,然後在彈出來的對話方塊中輸入 Servers,點選OK就可以了看到了
在彈出來的對話方塊中,不用改變啥,直接,Next,然後 Finish 即可
雙擊建好的服務,開啟如下介面:
注意:如果你伺服器裡面有專案了,那必須清楚專案,才能開啟進行修改
在開啟的介面進行如下的修改操作,然後儲存
伺服器已經部署完成,那麼接下來就是將專案部署到伺服器上,啟動伺服器即可
右鍵專案名,選擇 Run AS--->Run on Server,然後點選 Finish 即可執行專案了
注意:第 7 步一定要操作,然後伺服器能正常啟動,但是訪問專案卻會報 404 錯誤。這是因為eclipse將tomcat的專案釋出目錄(tomcat 目錄中的webapp)重定向了,所以你會發現在tomcat安裝目錄下的webapp目錄裡面找不到你的專案檔案
tomcat 伺服器啟動時做的工作
①、載入 web.xml 檔案配置的過濾器,呼叫過濾器的 init()方法,初始化所有資原始檔,主要包括 default.properties 檔案,struts-default.xml,strut-plugin.xml,struts.xml 檔案
Eclipse中tomcat service設定
選擇window ----show view---services可以看到服務的面板
雙擊tomcat進入配置介面Service Locations(Specify the server path (i.e. catalina.base) and deploy path. Server must be published with no modules present to make changes.)選項變灰色無法更改配置。
若要更改,則先把tomcat下的所有專案移除。並右擊,clean...之後方可設定。。。啟動後將又變為黑色。
預設選項為:
Use workspace metadata(dose not modify Tomcat installation)
修改選項為:
Use Tomcat installation(takes control of Tomcat installation)
然後把Deploy path設定為TOMCAT_HOME/webapps就可以了
注:在進行此步驟時,TOMCAT7上部署的專案要全remove,然後啟動,這時候ServerLocations才可以進行配置。
儲存配置,重新啟動TOMCAT即可。
Publishing
Never publish automatically 從不自動釋出專案
更改專案的根路徑
四、單個專案引入tomcat
選擇專案右鍵,build path ---Library
選擇Add Library 選擇server Runtime
選擇上面已經配置的tomcat即可
檢視專案中引入的tomcat服務
選擇專案右鍵---properties--project Facets 點選最右邊的Runtimes
五、tomcat部署專案
一、tomcat自動部署web應用
最典型的自動部署,就是當我們安裝完Tomcat後,$TOMCAT_HOME/webapps目錄下有如下資料夾:
通過eclipse將要部署的專案打包成war包,放到tomcat下的到wabapps目錄下
將編寫並編譯好的web專案(注意要是編譯好的,如果是 eclipse,可以將專案打成 war 包放入),放入到 webapps 中
tomcat的預設訪問路徑是ROOT,一般情況把war包改名為ROOT放在tomcat的webapp下
在bin目錄下執行 startup.bat 啟動專案即可。
當我們啟動Tomcat後,可以使用http://localhost:8080/來訪問Tomcat,其實訪問的就是ROOT對應的Web應用;
也可以直接把.war檔案放在webapps目錄下執行 startup.bat即可
在瀏覽器輸入:http://localhost:8080/專案名/訪問的檔名
二、server.xml中靜態部署Web應用
修改 conf/server.xml 檔案
除了自動部署,我們也可以在server.xml中通過<context>元素靜態部署Web應用。
①、開啟tomcat下conf/server.xml,在<Host> </Host>標籤之間輸入專案配置資訊
<Context path="/WebProject" docBase="D:/WebProject" reloadable="true" />
靜態部署與自動部署是可以共存的。在實際應用中,並不推薦使用靜態部署,因為server.xml 是不可動態重載入的資源,伺服器一旦啟動了以後,要修改這個檔案,就得重啟伺服器才能重新載入。而自動部署可以在Tomcat執行時通過定期的掃描來實現,不需要重啟伺服器。
path:瀏覽器訪問時的路徑名
docBase:web專案的WebRoot所在的路徑,注意是WebRoot的路徑,不是專案的路徑。其實也就是編譯後的專案
reloadble:設定專案有改動時,tomcat是否重新載入該專案
雙擊 startup.bat,啟動 tomcat 伺服器,然後在瀏覽器輸入訪問的專案名稱路徑
注意:如果你配置的 path="/xx",那麼訪問的時候就是這樣:
<Context>元素的配置
Context元素最重要的屬性是docBase和path,此外reloadable屬性也比較常用。
docBase指定了該Web應用使用的WAR包路徑,或應用目錄。可以給定絕對路徑也可以給定相對路徑。如應用HelloApp1的檔案路徑為/webapps/HelloApp1
path指定了訪問該Web應用的上下文路徑,當請求到來時,Tomcat根據Web應用的 path屬性與URI的匹配程度來選擇Web應用處理相應請求。例如,Web應用app1的path屬性是”/app1”,Web應用app2的path屬性是”/app2”,那麼請求/app1/index.html會交由app1來處理;而請求/app2/index.html會交由app2來處理。如果一個Context元素的path屬性為””,那麼這個Context是虛擬主機的預設Web應用;當請求的uri與所有的path都不匹配時,使用該預設Web應用來處理。
但是,需要注意的是,在自動部署場景下(配置檔案位於xmlBase中),不能指定path屬性,path屬性由配置檔案的檔名、WAR檔案的檔名或應用目錄的名稱自動推匯出來。如掃描Web應用時,發現了xmlBase目錄下的app1.xml,或appBase目錄下的app1.WAR或app1應用目錄,則該Web應用的path屬性是”app1”。如果名稱不是app1而是ROOT,則該Web應用是虛擬主機預設的Web應用,此時path屬性推導為””。
reloadable屬性指示tomcat是否在執行時監控在WEB-INF/classes和WEB-INF/lib目錄下class檔案的改動。如果值為true,那麼當class檔案改動時,會觸發Web應用的重新載入。在開發環境下,reloadable設定為true便於除錯;但是在生產環境中設定為true會給伺服器帶來效能壓力,因此reloadable引數的預設值為false。
上面訪問的url為http://localhost:8080/HelloApp1/
三、動態部署,tomcat 服務啟動後還可以釋出 web 專案
上面的方法沒法再tomcat啟動的時候釋出專案
①、進入到 apache-tomcat-7.0.52\conf\Catalina\localhost 目錄,新建一個 專案名.xml 檔案
②、在 那個新建的 xml 檔案中,增加下面配置語句(和上面的是一樣的,但是不需要 path 配置,加上也沒什麼用)
③、在瀏覽器輸入路徑:localhost:8080/xml檔名/訪問的檔名
用這種方式每個專案分開配置,tomcat 將以\conf\Catalina\localhost 目錄下的 xml 檔案的檔名作為 web 應用的上下文路徑,而不再理會 <Context>中配置的 path 路徑,因此在配置的時候,可以不寫 path。
①、第一種方法比較普通,但是我們需要將編譯好的專案重新 copy 到 webapps 目錄下,多出了兩步操作
②、第二種方法直接在 server.xml 檔案中配置,但是從 tomcat5.0版本開始後,server.xml 檔案作為 tomcat 啟動的主要配置檔案,一旦 tomcat 啟動後,便不會再讀取這個檔案,因此無法再 tomcat 服務啟動後釋出 web 專案
③、第三種方法是最好的,每個專案分開配置,tomcat 將以\conf\Catalina\localhost 目錄下的 xml 檔案的檔名作為 web 應用的上下文路徑,而不再理會 <Context>中配置的 path 路徑,因此在配置的時候,可以不寫 path。
通常我們使用第三種方法
四、tomcat配置多個服務
1) 修改Tomcat的埠號
Tomcat在使用的時候會用到三個埠號:
8005:Tomcat 監聽的關閉埠;
8080:Tomcat的服務埠;
8009:接受其他伺服器轉發過來的請求;
修改了這三個埠號,就可以在一臺主機上啟動多個Tomcat了;
修改檔案位置:apache-tomcat-7.0.77\conf\server.xml;
下面是具體的修改前後對比圖:
通過在Server中配置多個Service服務,可以實現通過不同的埠號來訪問同一臺機器上部署的不同Web應用。
在server.xml中配置多服務的方法非常簡單,分為以下幾步:
(1)複製<Service>元素,放在當前<Service>後面。
(2)修改埠號:根據需要監聽的埠號修改<Connector>元素的port屬性;必須確保該埠沒有被其他程序佔用,否則Tomcat啟動時會報錯,而無法通過該埠訪問Web應用。
以Win7為例,可以用如下方法找出某個埠是否被其他程序佔用:netstat -aon|findstr "8081"發現8081埠被PID為2064的程序佔用,tasklist |findstr "2064"發現該程序為FrameworkService.exe(這是McAfee防毒軟體的程序)。
(3)修改Service和Engine的name屬性
(4)修改Host的appBase屬性(如webapps2)
(5)Web應用仍然使用自動部署
(6)將要部署的Web應用(WAR包或應用目錄)拷貝到新的appBase下。
以第一部分的server.xml為例,多個Service的配置如下:
1 <?xml version='1.0' encoding='utf-8'?>
2 <Server port="8005" shutdown="SHUTDOWN">
3 <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
4 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
5 <Listener className="org.apache.catalina.core.JasperListener" />
6 <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
7 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
8 <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
9
10 <GlobalNamingResources>
11 <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />
12 </GlobalNamingResources>
13
14 <Service name="Catalina">
15 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
16 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
17 <Engine name="Catalina" defaultHost="localhost">
18 <Realm className="org.apache.catalina.realm.LockOutRealm">
19 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
20 resourceName="UserDatabase"/>
21 </Realm>
22
23 <Host name="localhost" appBase="/opt/project/webapps" unpackWARs="true" autoDeploy="true">
24 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
25 </Host>
26 </Engine>
27 </Service>
28
29 <Service name="Catalina2">
30 <Connector port="8084" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
31 <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
32 <Engine name="Catalina2" defaultHost="localhost">
33 <Realm className="org.apache.catalina.realm.LockOutRealm">
34 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
35 resourceName="UserDatabase"/>
36 </Realm>
37
38 <Host name="localhost" appBase="/opt/project/webapps2" unpackWARs="true" autoDeploy="true">
39 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
40 </Host>
41 </Engine>
42 </Service>
43 </Server>
將要部署的Web應用(WAR包或應用目錄)拷貝到新的appBase下,即將原webapps下的docs目錄拷貝到webapps2中,則通過如下兩個介面都可以訪問docs應用:
注意Service name、Engine name、appBase,埠號別忘了修改,以免重複
釋出的路徑不同,appBase分別釋出在webapps、webapps2跟tomcat的bin目錄同一級
複製$TOMCAT_HOME\confi目錄下的Catalina生成副本 ,並命名為Catalina2
http://localhost:8080/專案名稱
http://localhost:8084/專案名稱