1. 程式人生 > >tomcat的安裝與web專案部署到tomcat的使用

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 &quot;%r&quot; %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 &quot;%r&quot; %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/專案名稱