
摘要:Web應(yīng)用程序可以通過在Web服務(wù)器啟動(dòng)之前進(jìn)行部署,這種靜態(tài)部署的方式并不靈活,部署和卸載都需要對(duì)服務(wù)器進(jìn)行操作,而動(dòng)態(tài)部署則可以在服務(wù)器運(yùn)行的狀態(tài)下部署Web應(yīng)用程序。Tomcat7通過自帶的Web應(yīng)用程序manager,全面支持動(dòng)態(tài)部署,并且能夠?qū)Ψ?wù)器中Web應(yīng)用程序進(jìn)行管理。
關(guān)鍵詞:Web服務(wù)器;靜態(tài)部署;動(dòng)態(tài)部署;Web應(yīng)用程序
中圖分類號(hào):[G714] 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-864X(2014)08-0184-02
一、引言
動(dòng)態(tài)部署,名如其意,就是在Web服務(wù)器運(yùn)行時(shí)部署依賴它的Web應(yīng)用程序。對(duì)于所欲的Web服務(wù)器來說,動(dòng)態(tài)部署是一個(gè)非常有必要實(shí)現(xiàn)的功能,除了能部署新的Web應(yīng)用程序之外,還能夠?qū)Υ嬖诘捻?xiàng)目取消部署,而這些都是在服務(wù)器仍處于運(yùn)行狀態(tài)的情形下實(shí)現(xiàn)的。本文以Apache Tomcat服務(wù)器為例,對(duì)其動(dòng)態(tài)部署的方式進(jìn)行研究。
二、Tomcat7簡(jiǎn)介
Tomcat是由Apache軟件基金會(huì)下屬的Jakarta項(xiàng)目開發(fā)的一個(gè)Servlet容器,依照原Sun Microsystems提供的技術(shù)規(guī)范,實(shí)現(xiàn)了對(duì)Servlet和JavaServer Page(JSP)的支持,并提供了作為Web服務(wù)器的一些特有功能[1]。由于Tomcat本身也內(nèi)含了一個(gè)HTTP服務(wù)器,它也可以被視作一個(gè)單獨(dú)的Web服務(wù)器。因?yàn)橥瑢儆贏pache軟件基金會(huì)的下屬項(xiàng)目,經(jīng)常會(huì)有程序員混淆Apache Web Server和Tomcat,認(rèn)為它們就是一個(gè)服務(wù)器;其實(shí)不然,Apache Web Server 是一個(gè)用 C 語言實(shí)現(xiàn)的 HTTP Web Server,一個(gè)完全的Web服務(wù)器。
Tomcat7始于2010年,最初的版本是7.0.0beta,在2011年1月11日發(fā)布的Tomcat 7.0.6已經(jīng)成為穩(wěn)定版本,這是Tomcat 7分支的第一個(gè)穩(wěn)定版本,用來取代2007年2月發(fā)布的Tomcat 6,Tomcat7修復(fù)大量的原有bug,包括其中各個(gè)模塊,如Catalina,Coyote,Jasper等,其中包括一些比較嚴(yán)重的如內(nèi)存泄露問題,線程安全問題等。
三、Tomcat7下實(shí)現(xiàn)動(dòng)態(tài)部署
Tomcat通過自帶的Web應(yīng)用程序manager來實(shí)現(xiàn)對(duì)容器中的Web應(yīng)用程序目錄或是WAR文件進(jìn)行動(dòng)態(tài)部署。
1.manager權(quán)限設(shè)置。
由于版本的更新,Tomcat7和6相比較,在權(quán)限配置方面變的更細(xì)微,原來Tomcat6中的manager應(yīng)用程序的權(quán)限在7中被細(xì)分為4種,這些權(quán)限的名字都被定義在Tomcat7提供的manager應(yīng)用程序目錄下的\WEB-INF\web.xml文件中,它們是分別是manager-gui,manager-status,manager-script和manager-jmx,其描述見表1。
表1
角色名描述
manager-gui允許訪問HTML接口
manager-status僅允許訪問訪問“Server Status”頁面
manager-script允許訪問“Server Status”頁和文檔里友好的簡(jiǎn)單text接口
manager-jmx允許訪問“Server Status”頁和JMX代理接口
其中HMTL接口包含manager應(yīng)用中的圖形界面,有效能防止跨站點(diǎn)偽造請(qǐng)求(Cross-Site Request Forgery,CSRF)的攻擊,但是text和JMX就不具備這樣的能力。text接口通過查詢字符串的方式在地址欄用manager支持的指令管理容器內(nèi)的Web應(yīng)用程序。這里以manager-gui為例,來看一下web.xml文件中權(quán)限的設(shè)置和角色的聲明,代碼如下:
MemoryRealm是域(Realm)的一種,用來讀取保存在\conf\tomcat-users.xml文件中的角色和用戶名、密碼的關(guān)聯(lián)信息。
在tomcat-user.xml文件中配置角色和管理用戶的代碼如下:
tomcat-users.xml文件可以設(shè)置不同的角色,使用這些角色名和權(quán)限的前提條件是在包含它們的Web應(yīng)用程序目錄下的web.xml中聲明。
當(dāng)完成上述操作之后,便可以通過瀏覽器打開tomcat的歡迎界面,選擇“Manager App”入口,把tomcat-users.xml文件中自定義的用戶名和密碼在彈出的登錄對(duì)話框中輸入,即進(jìn)入tomcat7中的manager應(yīng)用中,動(dòng)態(tài)的配置當(dāng)前tomcat容器中所有被部署的Web應(yīng)用程序,包括manager本身。
2.圖形化的動(dòng)態(tài)部署。
完成Tomcat7中manager應(yīng)用的權(quán)限配置后,在命令提示符下啟動(dòng)Tomcat服務(wù)器,在瀏覽器中輸入http://localhost:8080進(jìn)入Tomcat的歡迎界面,選擇“Manager App”入口,在彈出的用戶名和密碼對(duì)話框中輸入tomcat-users.xml配置好的用戶名和密碼,則可以進(jìn)入圖形化動(dòng)態(tài)部署模式。
圖形化部署模式提供下列9種功能:
· 通過直接指定WAR文件,部署一個(gè)新的Web應(yīng)用程序
· 通過在服務(wù)器文件系統(tǒng)中指定Web應(yīng)用程序的上下文路徑來部署一個(gè)新的應(yīng)用
· 提供服務(wù)器中當(dāng)前被部署的所有Web應(yīng)用程序列表和這些應(yīng)用中被激活的會(huì)話信息
· 通過對(duì)\WEB-INF\classes和\WEB-INF\lib目錄中文件的監(jiān)視和反射,重新加載容器中已存在的Web應(yīng)用程序
· 提供當(dāng)前操作系統(tǒng)和Java虛擬機(jī)的屬性列表
· 提供可用的全局可用的JNDI資源列表,在部署工具中通過在
· 啟動(dòng)已經(jīng)停止的Web應(yīng)用程序
· 停止正在運(yùn)行的Web應(yīng)用程序
· 卸載已經(jīng)部署的Web應(yīng)用程序,并刪除其根目錄的文檔
圖形話部署模式可以是開發(fā)人員方便快捷對(duì)Web應(yīng)用程序進(jìn)行部署,并對(duì)容器中存在的應(yīng)用進(jìn)行管理。
3.指令化的動(dòng)態(tài)部署。
除了圖形化的部署方式外,manager應(yīng)用程序還提供指令化的動(dòng)態(tài)部署模式。指令化的部署實(shí)際上是在地址欄通過text接口輸入部署的指令和參數(shù)即可實(shí)現(xiàn)指令化的部署模式,所有manager已知的指令通過在獨(dú)立的請(qǐng)求URI指定而被執(zhí)行。
指令化的動(dòng)態(tài)部署模式URI格式如下:
http://{host}:{port}/manager/text/{command}?{parameters}
{command}代表manager應(yīng)用下程序員需要執(zhí)行的指令,{parameters}表示針對(duì)URI中的指令提供的查詢參數(shù)。
manager中常用指令如下:
list:提供Tomcat容器中當(dāng)前Web應(yīng)用程序列表
reload:重新加載Web應(yīng)用程序
serverinfo:服務(wù)器信息
sessions:會(huì)話管理
start:?jiǎn)?dòng)Web應(yīng)用程序
stop:停止Web應(yīng)用程序
deploy:部署新的Web應(yīng)用程序
undeploy:卸載存在的Web應(yīng)用程序
這些指令有些可以單獨(dú)使用,如list,而大部分需要使用“?”連接參數(shù)一起使用,manager應(yīng)用提供的參數(shù)包括path、version、war等。
本文主要闡述deploy指令部署新的Web應(yīng)用程序。
通過Web應(yīng)用程序上下文部署
http://localhost:8080/manager/text/deploy?path=/foo
其中Web應(yīng)用程序的上下文通過path參數(shù)指定為/foo。
通過URL部署Web應(yīng)用程序目錄
http://localhost:8080/manager/text/deploy?path=/footoowar=file:/path/to/foo
其中Web應(yīng)用程序的上下文通過path參數(shù)指定為/footoo,程序目錄則通過war參數(shù)指定,由于部署的是文件目錄,所以需要指定文件協(xié)議file。
通過URL部署WAR
http://localhost:8080/manager/text/deploy?war=jar:file:/path/to/bar.war!/
使用URL部署WAR的特殊之處在于需要把jar和file連接使用,并且WAR文件不能在URL中以擴(kuò)展名war結(jié)束,需要在之后添加“!/”。
通過Host appBase部署Web應(yīng)用程序目錄
http://localhost:8080/manager/text/deploy?war=foo
Host appBase表示服務(wù)器的應(yīng)用程序跟目錄,在Tomcat中即為webapps,使用這種方式部署需要事先把Web應(yīng)用程序目錄拷貝到appBase中,不需要指定應(yīng)用程序的上下文,直接提供Web應(yīng)用程序在appBase下的相對(duì)路徑即可。
通過Host appBase部署WAR
http://localhost:8080/manager/text/deploy?war=bar.war
和部署目錄方式一致,通過Host appBase部署WAR時(shí),事先要把WAR文件拷貝到appBase目錄下,然后使用war參數(shù)直接指定WAR文件即可。
四、總結(jié)
Tomcat7作為一款靈巧的HTTP服務(wù)器,最新版本已經(jīng)提供了對(duì)Servlet3.0和JSP2.3的支持。通過Tomcat7提供的動(dòng)態(tài)部署方式能夠簡(jiǎn)單快速的對(duì)Web應(yīng)用程序進(jìn)行部署,使用圖形化的模式直觀且方便,并且可以輕松的對(duì)容器中已經(jīng)部署的Web應(yīng)用程序和會(huì)話進(jìn)行管理;指令化的模式能夠讓程序員以更快捷的方式對(duì)Web應(yīng)用程序進(jìn)行部署和卸載,前提是熟悉manager下的指令和參數(shù)。
參考文獻(xiàn):
[1]維基百科.Apache Tomcat.2013-6.[DB/OL]http://zh.wikipedia.org/wiki/Apache_Tomcat
[2]孫衛(wèi)琴. Tomcat與Java Web開發(fā)技術(shù)詳解(第2版).電子工業(yè)出版社[M].2009-1。
[3] Budi Kurniawan著. 曹旭東譯. 深入剖析Tomcat.機(jī)械工業(yè)出版社[M].2012-1。