在許多生產環境中,具備部署新Web應用程序或取消部署現有Web應用程序的功能很是有用,而無需關閉並從新啓動整個容器。另外,即便您還沒有聲明它reloadable
在Tomcat服務器配置文件中,也能夠請求現有應用程序從新加載自身。html
爲了支持這些功能,Tomcat包含一個Web應用程序(默認狀況下安裝在上下文路徑中/manager
),該應用程序支持如下功能:java
/WEB-INF/classes
或更改內容/WEB-INF/lib
。<ResourceLink>
嵌套在<Context>
部署描述中的元素的部署工具。默認的Tomcat安裝包括Manager。要將Manager Web應用程序的實例添加Context
到新主機,請在manager.xml
文件$CATALINA_BASE/conf/[enginename]/[hostname]
夾中安裝 上下文配置文件 。這裏是一個例子:web
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1" /> </Context>
若是您將Tomcat配置爲支持多個虛擬主機(網站),則須要爲每一個虛擬主機配置一個管理器。sql
有三種方法可使用Manager Web應用程序。數據庫
localhost
用您的網站主機名替換: http://localhost:8080/manager/html
。下面的描述使用變量名$ CATALINA_BASE來引用基本目錄,大多數相對路徑被解析。若是您還沒有經過設置CATALINA_BASE目錄將Tomcat配置爲多個實例,則$ CATALINA_BASE將被設置爲$ CATALINA_HOME(您已安裝Tomcat的目錄)的值。apache
使用容許互聯網上的任何人執行服務器上的Manager應用程序的默認設置來運送Tomcat是至關不安全的。所以,Manager應用程序隨附的要求是,任未嘗試使用它的用戶都必須使用具備與其關聯的manager-xxx角色之一(角色名稱取決於所需功能)的用戶名和密碼進行身份驗證。此外,$CATALINA_BASE/conf/tomcat-users.xml
分配給這些角色的默認用戶文件()中沒有用戶名。所以,默認狀況下徹底禁用對Manager應用程序的訪問。瀏覽器
您能夠web.xml
在Manager Web應用程序的文件中找到角色名稱。可用的角色是:tomcat
HTML接口受到CSRF(跨站點請求僞造)攻擊的保護,但文本和JMX接口沒法受到保護。這意味着容許訪問文本和JMX界面的用戶在使用Web瀏覽器訪問Manager應用程序時必須謹慎行事。爲了保持CSRF保護:安全
請注意,JMX代理接口其實是Tomcat的低級別根類管理接口。若是他知道要調用哪些命令,能夠作不少事情。啓用manager-jmx角色時應謹慎 。服務器
要容許訪問Manager Web應用程序,您必須建立一個新的用戶名/密碼組合,並將其中一個manager-xxx角色與其關聯 ,或者將manager-xxx角色添加 到某個現有用戶名/密碼組合。因爲本文檔的大部分描述了使用文本界面,本示例將使用角色名稱管理器腳本。具體如何配置用戶名/密碼取決於 您使用的Realm實施方式:
$CATALINA_BASE/conf/server.xml
。MemoryUserDatabase和MemoryRealm都默認讀取一個XML格式的文件 $CATALINA_BASE/conf/tomcat-users.xml
,這個文件能夠用任何文本編輯器編輯。該文件包含<user>
每一個用戶的XML ,可能以下所示: <user username="craigmcc" password="secret" roles="standard,manager-script" />它定義了這我的用來登陸的用戶名和密碼,以及他或她所關聯的角色名稱。您能夠將manager-script角色添加到
roles
一個或多個現有用戶的逗號分隔 屬性,和/或使用該指定角色建立新用戶。當您第一次嘗試發佈下一節中介紹的管理員命令之一時,您將面臨使用BASIC認證登陸的挑戰。您輸入的用戶名和密碼可有可無,只要它們標識擁有角色管理器腳本的用戶數據庫中的有效用戶便可。
除了密碼限制以外,還能夠經過添加或來限制遠程IP地址或主機對Manager Web應用程序的訪問權限。詳情請參閱閥門文檔 。如下是經過IP地址限制對本地主機的訪問的示例:RemoteAddrValve
RemoteHostValve
<Context privileged="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1"/> </Context>
Manager Web應用程序的用戶友好HTML界面位於
http://{host}:{port}/manager/html
如上所述,您須要 容許manager-gui角色訪問它。有一個單獨的文檔提供了有關此界面的幫助。看到:
HTML接口受到CSRF(跨站點請求僞造)攻擊的保護。每次訪問HTML頁面都會生成一個隨機令牌,該令牌存儲在會話中幷包含在頁面上的全部連接中。若是您的下一個操做沒有正確的令牌值,則操做將被拒絕。若是令牌已過時,則能夠從管理器的主頁面或列表應用程序頁面從新開始 。
Manager應用程序知道如何處理的全部命令都在單個請求URI中指定,以下所示:
http://{host}:{port}/manager/text/{command}?{parameters}
其中{host}
和{port}
表示是Tomcat運行的主機名和端口號,{command}
表示要執行經理命令, {parameters}
表明特定於該命令的查詢參數。在下面的插圖中,爲您的安裝適當地自定義主機和端口。
這些命令一般由HTTP GET請求執行。該 /deploy
命令具備由HTTP PUT請求執行的表單。
大多數命令接受一個或多個如下查詢參數:
/deploy
命令,而且是於該命令的惟一可接受的格式。每一個命令都將返回一個text/plain
格式的響應(即純HTML沒有HTML標記),令人和程序均可以輕鬆讀取)。響應的第一行將以OK
或者開始 FAIL
,指示請求的命令是否成功。在失敗的狀況下,第一行的其他部分將包含遇到的問題的描述。某些命令包含以下所述的其餘行信息。
國際化注意事項 - Manager應用程序在資源包中查找其消息字符串,所以可能爲您的平臺翻譯了字符串。如下示例顯示了這些消息的英文版本。
http://localhost:8080/manager/text/deploy?path=/foo
上傳在此HTTP PUT請求中指定爲請求數據的Web應用程序存檔(WAR)文件,將其安裝到appBase
咱們對應的虛擬主機的目錄中,而後啓動,爲appBase
從指定路徑添加的WAR文件派生名稱。稍後可使用該/undeploy
命令取消部署該應用程序(並刪除相應的WAR文件)。
該命令由HTTP PUT請求執行。
.WAR文件可能包含Tomcat特定的部署配置,其中包含一個Context配置XML文件 /META-INF/context.xml
。
網址參數包括:
update
:若是設置爲true,則任何現有更新都將首先取消部署。默認值設置爲false。tag
:指定標籤名稱,這容許將部署的webapp與標籤或標籤相關聯。若是Web應用程序未部署,則能夠稍後在僅使用標記的狀況下從新部署。注 - 該命令與命令的邏輯相反/undeploy
。
若是安裝和啓動成功,您將收到以下響應:
OK - Deployed application at context path /foo
不然,響應將以開始FAIL
幷包含錯誤消息。問題的可能緣由包括:
全部當前運行的Web應用程序的上下文路徑必須是惟一的。所以,您必須使用此上下文路徑取消部署現有的Web應用程序,或者爲新的Web應用程序選擇不一樣的上下文路徑。該update
參數能夠指定爲URL上的參數,其值爲true
避免此錯誤。在這種狀況下,將在執行部署以前在現有應用程序上執行取消部署。
嘗試啓動新的Web應用程序時遇到異常。查看Tomcat日誌以獲取詳細信息,但可能的解釋包括解析/WEB-INF/web.xml
文件時遇到的問題,或初始化應用程序事件偵聽器和過濾器時遇到的類丟失。
部署並啓動一個新的Web應用程序,並附加到指定的上下文中 path
(不能由任何其餘Web應用程序使用)。該命令與命令的邏輯相反/undeploy
。
該命令由HTTP GET請求執行。可使用部署命令的多種不一樣方式。
http://localhost:8080/manager/text/deploy?path=/footoo&tag=footag
這可用於部署之前部署的Web應用程序,該應用程序已使用該tag
屬性進行了部署。請注意,Manager webapp的工做目錄將包含先前部署的WAR; 刪除它會致使部署失敗。
部署位於Tomcat服務器上的Web應用程序目錄或「.war」文件。若是path
指定no ,則路徑和版本將從目錄名稱或war文件名稱派生。該war
參數指定file:
目錄或Web應用程序歸檔(WAR)文件的URL(包括方案)。在Javadocs頁面上描述了引用WAR文件的URL的支持語法 java.net.JarURLConnection
。僅使用引用整個WAR文件的URL。
在此示例中,位於/path/to/foo
Tomcat服務器目錄 中的Web應用程序部署爲名爲的Web應用程序上下文/footoo
。
http://localhost:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo
在本例中,/path/to/bar.war
Tomcat服務器上的「.war」文件被部署爲名爲的Web應用程序上下文 /bar
。請注意,沒有path
參數,所以上下文路徑默認爲不帶「.war」擴展名的Web應用程序歸檔文件的名稱。
http://localhost:8080/manager/text/deploy?war=file:/path/to/bar.war
部署位於您的Host appBase目錄中的Web應用程序目錄或「.war」文件。路徑和可選版本源自目錄或war文件名。
在此示例中,位於 foo
Tomcat服務器的Host appBase目錄中的子目錄中的Web應用程序將部署爲名爲的Web應用程序上下文/foo
。請注意,使用的上下文路徑是Web應用程序目錄的名稱。
http://localhost:8080/manager/text/deploy?war=foo
在這個例子中,bar.war
位於Tomcat服務器的Host appBase目錄中的「.war」文件被部署爲名爲的Web應用程序上下文/bar
。
http://localhost:8080/manager/text/deploy?war=bar.war
若是Host deployXML標誌設置爲true,則可使用Context配置「.xml」文件和可選的「.war」文件或Web應用程序目錄來部署Web應用程序。上下文path
使用上下文「.XML」配置文件部署Web應用程序時不被使用。
上下文配置「.xml」文件能夠包含Web應用程序上下文的有效XML,就像它在Tomcat server.xml
配置文件中配置同樣。這裏是一個例子:
<Context path="/foobar" docBase="/path/to/application/foobar"> </Context>
當可選war
參數設置爲Web應用程序「.war」文件或目錄的URL時,它將覆蓋上下文配置「.xml」文件中配置的任何docBase。
如下是使用Context配置「.xml」文件部署應用程序的示例。
http://localhost:8080/manager/text/deploy?config=file:/path/context.xml
如下是使用位於服務器上的Context配置「.xml」文件和Web應用程序「.war」文件部署應用程序的示例。
http://localhost:8080/manager/text/deploy ?config=file:/path/context.xml&war=file:/path/bar.war
若是主機配置了unpackWARs = true而且您部署了一個war文件,則該war將被解壓到您的主機appBase目錄中的一個目錄中。
若是應用程序戰爭或目錄安裝在您的主機appBase目錄中,而且主機配置了autoDeploy = true,或者上下文路徑必須與不帶「.war」擴展名的目錄名或war文件名匹配。
爲了確保不受信任的用戶能夠管理Web應用程序的安全性,能夠將Host deployXML標誌設置爲false。這能夠防止不受信任的用戶使用配置XML文件部署Web應用程序,並防止他們部署位於其主機應用程序庫外部的應用程序目錄或「.war」文件。
若是安裝和啓動成功,您將收到以下響應:
OK - Deployed application at context path /foo
不然,響應將以開始FAIL
幷包含錯誤消息。問題的可能緣由包括:
全部當前運行的Web應用程序的上下文路徑必須是惟一的。所以,您必須使用此上下文路徑取消部署現有的Web應用程序,或者爲新的Web應用程序選擇不一樣的上下文路徑。該update
參數能夠指定爲URL上的參數,其值爲true
避免此錯誤。在這種狀況下,將在執行部署以前在現有應用程序上執行取消部署。
war
參數指定的URL 必須標識此服務器上包含Web應用程序的「解包」版本的目錄,或包含此應用程序的Web應用程序存檔(WAR)文件的絕對URL。更正war
參數指定的值。
嘗試啓動新的Web應用程序時遇到異常。查看Tomcat日誌以獲取詳細信息,但可能的解釋包括解析/WEB-INF/web.xml
文件時遇到的問題,或初始化應用程序事件偵聽器和過濾器時遇到的類丟失。
您指定的目錄或Web應用程序的URL無效。這些URL必須file:
以WAR 開頭,而且URL文件必須以「.war」結尾。
上下文路徑必須以斜槓字符開頭。要引用ROOT Web應用程序,請使用「/」。
若是應用程序戰爭或目錄安裝在主機appBase目錄中,而且主機配置了autoDeploy = true,則上下文路徑必須與不帶「.war」擴展名的目錄名稱或war文件名稱匹配。
若是Host deployXML標誌設置爲false,則若是嘗試在Host AppBase目錄以外部署Web應用程序目錄或「.war」文件,則會發生此錯誤。
http://localhost:8080/manager/text/list
列出全部當前部署的Web應用程序的上下文路徑,當前狀態(running
或 stopped
)以及活動會話的數量。啓動Tomcat後當即進行的典型響應可能以下所示:
OK - Listed applications for virtual host localhost /webdav:running:0:webdav /examples:running:0:examples /manager:running:0:manager /:running:0:ROOT /test:running:0:test##2 /test:running:0:test##1
http://localhost:8080/manager/text/reload?path=/examples
指示現有應用程序關閉並從新加載。若是Web應用程序上下文不可從新載入,而且已經更新了/WEB-INF/classes
目錄中的類或屬性文件,或者在目錄中添加或更新了jar文件時,這會很是有用/WEB-INF/lib
。
若是此命令成功,您將看到以下的響應:
OK - Reloaded application at context path /examples
不然,響應將以開始FAIL
幷包含錯誤消息。問題的可能緣由包括:
嘗試從新啓動Web應用程序時遇到異常。查看Tomcat日誌以獲取詳細信息。
上下文路徑必須以斜槓字符開頭。要引用ROOT Web應用程序,請使用「/」。
您指定的上下文路徑上沒有部署的應用程序。
該path
參數是必需的。
目前,web.xml
當Web應用程序直接從WAR文件進行部署時,不支持應用程序從新加載(以獲取對類或文件的更改 )。它僅適用於從解壓目錄中部署Web應用程序的狀況。若是您正在使用WAR文件,那麼應該undeploy
再次deploy
或者 deploy
經過update
參數使應用程序再次選擇您的更改。
http://localhost:8080/manager/text/serverinfo
列出有關Tomcat版本,操做系統和JVM屬性的信息。
若是發生錯誤,響應將從頭開始FAIL
幷包含錯誤消息。問題的可能緣由包括:
嘗試枚舉系統屬性時遇到異常。查看Tomcat日誌以獲取詳細信息。
http://localhost:8080/manager/text/resources[?type=xxxxx]
列出可用於上下文配置文件資源連接的全局JNDI資源。若是指定了type
請求參數,則該值必須是您感興趣的資源類型的徹底限定Java類名稱(例如,您將指定javax.sql.DataSource
獲取全部可用JDBC數據源的名稱)。若是您不指定type
請求參數,則會返回全部類型的資源。
根據type
請求參數是否被指定,正常響應的第一行將是:
OK - Listed global resources of all types
要麼
OK - Listed global resources of type xxxxx
以後每一個資源一行。每行由由冒號字符(「:」)分隔的字段組成,以下所示:
global
屬性中使用 <ResourceLink>
。若是發生錯誤,響應將從頭開始FAIL
幷包含錯誤消息。問題的可能緣由包括:
嘗試枚舉全局JNDI資源時遇到異常。查看Tomcat日誌以獲取詳細信息。
您正在運行的Tomcat服務器已配置爲不具備全局JNDI資源。
http://localhost:8080/manager/text/sessions?path=/examples
顯示Web應用程序的默認會話超時以及落在其實際超時時間的一分鐘範圍內的當前活動會話的數量。例如,在從新啓動Tomcat,而後在/examples
Web應用程序中執行一個JSP示例以後,您可能會獲得以下所示的內容:
OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes <1 minutes: 1 sessions 1 - <2 minutes: 1 sessions
http://localhost:8080/manager/text/expire?path=/examples&idle=num
顯示會話統計信息(如上述/sessions
命令)並使空閒時間超過num
幾分鐘的會話過時。要過時全部會話,請使用&idle=0
。
OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes 1 - <2 minutes: 1 sessions 3 - <4 minutes: 1 sessions >0 minutes: 2 sessions were expired
其實/sessions
和/expire
是相同的命令同義詞。區別在於idle
參數的存在。
http://localhost:8080/manager/text/start?path=/examples
指示中止的應用程序從新啓動,並使其本身再次可用。例如,若是應用程序所需的數據庫暫時不可用,則中止和啓動頗有用。中止依賴此數據庫的Web應用程序一般會更好,而不是讓用戶不斷遇到數據庫異常。
若是此命令成功,您將看到以下的響應:
OK - Started application at context path /examples
不然,響應將以開始FAIL
幷包含錯誤消息。問題的可能緣由包括:
嘗試啓動Web應用程序時遇到異常。查看Tomcat日誌以獲取詳細信息。
上下文路徑必須以斜槓字符開頭。要引用ROOT Web應用程序,請使用「/」。
您指定的上下文路徑上沒有部署的應用程序。
該path
參數是必需的。
http://localhost:8080/manager/text/stop?path=/examples
指示現有應用程序使其不可用,但保留它的部署狀態。在應用程序中止時進入的任何請求都將看到HTTP錯誤404,而且此應用程序將在列表應用程序命令中顯示爲「已中止」。
若是此命令成功,您將看到以下的響應:
OK - Stopped application at context path /examples
不然,響應將以開始FAIL
幷包含錯誤消息。問題的可能緣由包括:
嘗試中止Web應用程序時遇到異常。查看Tomcat日誌以獲取詳細信息。
上下文路徑必須以斜槓字符開頭。要引用ROOT Web應用程序,請使用「/」。
您指定的上下文路徑上沒有部署的應用程序。
path
參數是必需的。http://localhost:8080/manager/text/undeploy?path=/examples
警告 - 該命令將刪除appBase
該虛擬主機的目錄內存在的任何Web應用程序工件(一般爲「webapps」)。這將刪除應用程序.WAR(若是有的話),從應用程序目錄中以解壓縮的形式部署或從.WAR擴展部署獲得的應用程序目錄,以及從$CATALINA_BASE/conf/[enginename]/[hostname]/
目錄的XML上下文定義 。若是您只是想讓應用程序中止服務,則應該使用該/stop
命令。
指示現有的應用程序正常關閉,並將其從Tomcat中移除(這也使得此上下文路徑可供稍後重用)。另外,若是該文檔根目錄存在於appBase
該虛擬主機的目錄(一般是「webapps」)中,則該目錄將被刪除。該命令與命令的邏輯相反 /deploy
。
若是此命令成功,您將看到以下的響應:
OK - Undeployed application at context path /examples
不然,響應將以開始FAIL
幷包含錯誤消息。問題的可能緣由包括:
嘗試取消部署Web應用程序時遇到異常。查看Tomcat日誌以獲取詳細信息。
上下文路徑必須以斜槓字符開頭。要引用ROOT Web應用程序,請使用「/」。
沒有您指定的名稱的已部署應用程序。
path
參數是必需的。http://localhost:8080/manager/text/findleaks[?statusLine=[true|false]]
查找泄漏診斷觸發完整的垃圾回收。在生產系統中應該很是當心地使用它。
查找泄漏診斷嘗試識別在中止,從新加載或取消部署時致使內存泄漏的Web應用程序。結果應該始終使用分析器進行確認。診斷使用StandardHost實現提供的附加功能。若是使用不擴展StandardHost的自定義主機,它將不起做用。
記錄顯式觸發Java代碼的完整垃圾收集是不可靠的。此外,根據使用的JVM,能夠選擇禁用顯式GC觸發,例如-XX:+DisableExplicitGC
。若是您想確保診斷程序成功運行完整的GC,則須要使用GC日誌記錄,JConsole或相似工具進行檢查。
若是此命令成功,您將看到以下的響應:
/leaking-webapp
若是您但願查看響應中包含的狀態行statusLine
,請將請求中的查詢參數包含在 值中 true
。
中止,從新加載或取消部署的Web應用程序的每一個上下文路徑,但以前運行的哪些類仍然加載到內存中,從而致使內存泄漏,將在新行中列出。若是應用程序已屢次從新加載,則可能會屢次列出。
若是該命令不成功,則響應將以 FAIL
包含錯誤消息的開始。
http://localhost:8080/manager/text/sslConnectorCiphers
SSL鏈接器/密碼診斷程序列出了當前爲每一個鏈接器配置的SSL / TLS密碼。對於NIO和NIO2,列出了各個密碼套件的名稱。對於APR,返回SSLCipherSuite的值。
答案看起來像這樣:
OK - Connector / SSL Cipher information Connector[HTTP/1.1-8080] SSL is not enabled for this connector Connector[HTTP/1.1-8443] TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA TLS_DHE_RSA_WITH_AES_128_CBC_SHA TLS_ECDH_RSA_WITH_AES_128_CBC_SHA TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA ...
http://localhost:8080/manager/text/threaddump
編寫一個JVM線程轉儲。
答案看起來像這樣:
OK - JVM thread dump 2014-12-08 07:24:40.080 Full thread dump Java HotSpot(TM) Client VM (25.25-b02 mixed mode): "http-nio-8080-exec-2" Id=26 cpu=46800300 ns usr=46800300 ns blocked 0 for -1 ms waited 0 for -1 ms java.lang.Thread.State: RUNNABLE locks java.util.concurrent.ThreadPoolExecutor$Worker@1738ad4 at sun.management.ThreadImpl.dumpThreads0(Native Method) at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:446) at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:440) at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:409) at org.apache.catalina.manager.ManagerServlet.threadDump(ManagerServlet.java:557) at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:371) at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) ...
http://localhost:8080/manager/text/vminfo
編寫一些關於Java虛擬機的診斷信息。
答案看起來像這樣:
OK - VM info 2014-12-08 07:27:32.578 Runtime information: vmName: Java HotSpot(TM) Client VM vmVersion: 25.25-b02 vmVendor: Oracle Corporation specName: Java Virtual Machine Specification specVersion: 1.8 specVendor: Oracle Corporation managementSpecVersion: 1.2 name: ... startTime: 1418012458849 uptime: 393855 isBootClassPathSupported: true OS information: ...
http://localhost:8080/manager/text/save
若是未指定任何參數,則此命令將服務器的當前配置保存到server.xml。若是須要,現有文件將被重命名爲備份。
若是使用與path
部署的Web應用程序的路徑相匹配的參數指定,則該Web應用程序的配置將被保存到xmlBase
當前主機中適當命名的context.xml文件中。
要使用該命令,StoreConfig MBean必須存在。一般這是使用StoreConfigLifecycleListener配置的。
若是該命令不成功,則響應將以 FAIL
包含錯誤消息的開始。
從如下連接能夠查看關於服務器的狀態信息。任何一個manager-xxx角色都容許訪問此頁面。
http://localhost:8080/manager/status http://localhost:8080/manager/status/all
以HTML格式顯示服務器狀態信息。
http://localhost:8080/manager/status?XML=true http://localhost:8080/manager/status/all?XML=true
以XML格式顯示服務器狀態信息。
首先,您有服務器和JVM版本號,JVM提供程序,操做系統名稱和編號,而後是架構類型。
其次,有關於JVM的內存使用狀況的信息。
而後,有關於Tomcat AJP和HTTP鏈接器的信息。他們都有相同的信息:
線程信息:最大線程數,最小和最大備用線程數,當前線程數和當前線程繁忙。
請求信息:最大處理時間和處理時間,請求和錯誤計數,接收和發送的字節數。
顯示階段,時間,字節發送,字節接收,客戶端,VHost和請求的表格。表中列出了全部現有的線程。如下是可能的線程階段列表:
「解析和準備請求」:正在解析請求標頭或正在進行讀取請求正文(若是已指定傳輸編碼)的必要準備。
「服務」:線程正在處理請求並生成響應。此階段遵循「解析和準備請求」階段,並在「完成」階段以前。在這個階段老是有至少一個線程(服務器狀態頁面)。
「完成」:請求處理結束。任何剩餘的響應仍在輸出緩衝區中發送到客戶端。若是適合保持鏈接處於活動狀態,或者「保持活動」不合適,則該階段後面跟隨「Keep-Alive」。
「Keep-Alive」:在客戶端發送另外一個請求的狀況下,線程保持鏈接對客戶端開放。若是收到另外一個請求,下一階段將是「解析和準備請求」。若是在保持活動超時以前沒有收到請求,鏈接將被關閉,下一階段將爲「就緒」。
「就緒」:線程處於靜止狀態,可使用。
若是您使用的是/status/all
命令,則每一個部署的Web應用程序的其餘信息都將可用。
JMX代理Servlet是一個輕量級代理,用於獲取和設置tomcat內部。(或者任何經過MBean暴露的類)它的用法不是很是用戶友好,可是UI對於集成命令行腳原本監視和更改tomcat的內部很是有用。你能夠用代理作兩件事:獲取信息和設置信息。爲了您真正理解JMX代理Servlet,您應該對JMX有一個大致的瞭解。若是你不知道JMX是什麼,那麼準備好會感到困惑。
這採起的形式是:
http://webserver/manager/jmxproxy/?qry=STUFF
STUFF
您但願執行的JMX查詢在哪裏?例如,如下是您可能但願運行的一些查詢:
qry=*%3Atype%3DRequestProcessor%2C* --> type=RequestProcessor
這將找到全部能夠處理請求並報告其狀態的工做人員。qry=*%3Aj2eeType=Servlet%2c* --> j2eeType=Servlet
它返回全部加載的servlet。qry=Catalina%3Atype%3DEnvironment%2Cresourcetype%3DGlobal%2Cname%3DsimpleValue --> Catalina:type=Environment,resourcetype=Global,name=simpleValue
它以給定名稱查找特定的MBean。您須要試驗以真正理解其功能若是您不提供qry
參數,則將顯示全部MBean。咱們建議您查看tomcat源代碼並理解JMX規範,以更好地理解您可能運行的全部查詢。
JXMProxyServlet還支持一個「get」命令,您可使用該命令來獲取特定MBean屬性的值。該get
命令的通常形式是:
http://webserver/manager/jmxproxy/?get=BEANNAME&att=MYATTRIBUTE&key=MYKEY
您必須提供如下參數:
get
:完整的bean名稱att
:您想要獲取的屬性key
:(可選)成爲CompositeData MBean屬性的鍵若是一切順利,那麼它會說OK,不然會顯示錯誤消息。例如,假設咱們但願獲取當前的堆內存數據:
http://webserver/manager/jmxproxy/?get=java.lang:type=Memory&att=HeapMemoryUsage
或者,若是您只須要「已用」鍵:
http://webserver/manager/jmxproxy/ ?get=java.lang:type=Memory&att=HeapMemoryUsage&key=used
既然您能夠查詢MBean,那麼就可使用Tomcat的內部工具了!set命令的通常形式是:
http://webserver/manager/jmxproxy/?set=BEANNAME&att=MYATTRIBUTE&val=NEWVALUE
因此你須要提供3個請求參數:
set
:完整的bean名稱att
:你想改變的屬性val
:新的價值若是一切正常,那麼它會說OK,不然會顯示錯誤消息。例如,讓咱們說咱們但願打開調試的動態 ErrorReportValve
。如下將把調試設置爲10。
http://localhost:8080/manager/jmxproxy/ ?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost &att=debug&val=10
個人結果是(YMMV):
Result: ok
這是我看到的,若是我經過了一個很差的價值。這裏是我使用的URL,我嘗試設置調試等於'牛':
http://localhost:8080/manager/jmxproxy/ ?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost &att=debug&val=cow
當我嘗試時,個人結果是
Error: java.lang.NumberFormatException: For input string: "cow"
該invoke
命令容許在MBean上調用方法。該命令的通常形式是:
http://webserver/manager/jmxproxy/ ?invoke=BEANNAME&op=METHODNAME&ps=COMMASEPARATEDPARAMETERS
例如,要調用Service的使用findConnectors()
方法 :
http://localhost:8080/manager/jmxproxy/ ?invoke=Catalina%3Atype%3DService&op=findConnectors&ps=
如上文所述,除了可以經過HTTP請求執行管理器命令外,Tomcat還包括一組適用於Ant(版本1.4或更高版本)構建工具的任務定義。爲了使用這些命令,您必須執行如下設置操做:
$ANT_HOME/bin
目錄添加到您的PATH
環境變量。manager-script
角色的Tomcat用戶數據庫中至少配置一個用戶名/密碼組合。要在Ant中使用自定義任務,必須首先使用<import>
元素聲明它們 。所以,你的build.xml
文件可能看起來像這樣:
<project name="My Application" default="compile" basedir="."> <!-- Configure the directory into which the web application is built --> <property name="build" value="${basedir}/build"/> <!-- Configure the context path for this application --> <property name="path" value="/myapp"/> <!-- Configure properties to access the Manager application --> <property name="url" value="http://localhost:8080/manager/text"/> <property name="username" value="myusername"/> <property name="password" value="mypassword"/> <!-- Configure the path to the Tomcat installation --> <property name="catalina.home" value="/usr/local/apache-tomcat"/> <!-- Configure the custom Ant tasks for the Manager application --> <import file="${catalina.home}/bin/catalina-tasks.xml"/> <!-- Executable Targets --> <target name="compile" description="Compile web application"> <!-- ... construct web application in ${build} subdirectory, and generated a ${path}.war ... --> </target> <target name="deploy" description="Install web application" depends="compile"> <deploy url="${url}" username="${username}" password="${password}" path="${path}" war="file:${build}${path}.war"/> </target> <target name="reload" description="Reload web application" depends="compile"> <reload url="${url}" username="${username}" password="${password}" path="${path}"/> </target> <target name="undeploy" description="Remove web application"> <undeploy url="${url}" username="${username}" password="${password}" path="${path}"/> </target> </project>
注意:經過上述導入定義資源任務將覆蓋Ant 1.7中添加的資源數據類型。若是您但願使用資源數據類型,則須要使用Ant的名稱空間支持進行修改, catalina-tasks.xml
以將Tomcat任務分配給其本身的名稱空間。
如今,您能夠執行命令ant deploy
來將應用程序部署到正在運行的Tomcat實例,或者ant reload
告訴Tomcat從新加載它。還要注意,該build.xml
文件中的大部分有趣值都被定義爲可替換的屬性,所以您能夠從命令行覆蓋它們的值。例如,您可能認爲將真實管理員密碼包含在build.xml
文件源代碼中存在安全風險 。爲了不這種狀況,省略密碼屬性,並從命令行指定它:
ant -Dpassword=secret deploy
使用Ant版本1.6.2或更高版本,Catalina任務提供了在屬性或外部文件中捕獲其輸出的選項。它們直接支持<redirector>
類型屬性的如下子集 :
屬性 | 描述 | 須要 |
---|---|---|
產量 | 要寫入輸出的文件的名稱。若是錯誤流不是也被重定向到文件或屬性,它將出如今這個輸出中。 | 沒有 |
錯誤 | 應將命令的標準錯誤重定向到的文件。 | 沒有 |
LOGERROR | 當你但願在Ant的日誌中看到錯誤輸出,並將輸出重定向到文件/屬性時,使用該屬性。錯誤輸出將不會包含在輸出文件/屬性中。若是您使用錯誤或errorProperty 屬性重定向錯誤,則這將不起做用。 | 沒有 |
附加 | 輸出文件和錯誤文件是否應附加到或覆蓋。默認爲false 。 |
沒有 |
createemptyfiles | 輸出和錯誤文件是否應該在空時建立。默認爲true 。 |
沒有 |
outputproperty | 應該存儲命令輸出的屬性的名稱。除非錯誤流被重定向到單獨的文件或流,不然此屬性將包含錯誤輸出。 | 沒有 |
errorproperty | 應存儲命令的標準錯誤的屬性的名稱。 | 沒有 |
還能夠指定幾個附加屬性:
屬性 | 描述 | 須要 |
---|---|---|
alwaysLog | 當你但願看到你正在捕獲的輸出時,使用這個屬性,這個屬性也出如今Ant的日誌中。除非您捕獲任務輸出,不然不得使用它。默認爲false 。 該屬性將<redirector> 在Ant 1.6.3中直接支持 |
沒有 |
failonerror | 當您但願避免任何管理器命令處理錯誤終止螞蟻執行時使用此屬性。默認爲true 。false 若是要捕獲錯誤輸出,則必須將其設置爲,不然在捕獲任何內容以前執行將終止。 該屬性只對管理命令執行起做用,任何錯誤或缺乏的命令屬性仍將致使Ant執行終止。 |
沒有 |
它們還支持嵌入<redirector>
在其中您能夠指定其完整的屬性集元素,可是input
,inputstring
而且 inputencoding
,即便接受,不使用,由於他們在這方面沒有任何意義。有關元素屬性的詳細信息, 請參閱ant手冊<redirector>
。
這是一個示例構建文件提取,它顯示瞭如何使用此輸出重定向支持:
<target name="manager.deploy" depends="context.status" if="context.notInstalled"> <deploy url="${mgr.url}" username="${mgr.username}" password="${mgr.password}" path="${mgr.context.path}" config="${mgr.context.descriptor}"/> </target> <target name="manager.deploy.war" depends="context.status" if="context.deployable"> <deploy url="${mgr.url}" username="${mgr.username}" password="${mgr.password}" update="${mgr.update}" path="${mgr.context.path}" war="${mgr.war.file}"/> </target> <target name="context.status"> <property name="running" value="${mgr.context.path}:running"/> <property name="stopped" value="${mgr.context.path}:stopped"/> <list url="${mgr.url}" outputproperty="ctx.status" username="${mgr.username}" password="${mgr.password}"> </list> <condition property="context.running"> <contains string="${ctx.status}" substring="${running}"/> </condition> <condition property="context.stopped"> <contains string="${ctx.status}" substring="${stopped}"/> </condition> <condition property="context.notInstalled"> <and> <isfalse value="${context.running}"/> <isfalse value="${context.stopped}"/> </and> </condition> <condition property="context.deployable"> <or> <istrue value="${context.notInstalled}"/> <and> <istrue value="${context.running}"/> <istrue value="${mgr.update}"/> </and> <and> <istrue value="${context.stopped}"/> <istrue value="${mgr.update}"/> </and> </or> </condition> <condition property="context.undeployable"> <or> <istrue value="${context.running}"/> <istrue value="${context.stopped}"/> </or> </condition> </target>
警告:即便它沒有多少意義,而且老是一個壞主意,不止一次調用Catalina任務,嚴重地設置Ant任務依賴鏈可能致使在同一Ant運行中屢次調用一個任務,甚至若是沒有打算。當您捕獲該任務的輸出時應該謹慎行事,由於這可能會致使意想不到的結果:
append="true"
,在這種狀況下,您會看到每一個任務調用的輸出附加到文件中。注意:本評論部分收集您關於改進Apache Tomcat文檔的建議。
若是您遇到問題並須要幫助,請閱讀 查找幫助頁面,並在tomcat-users 郵件列表上提出您的問題 。這裏不要問這樣的問題。這不是問答部分。
Apache評論系統在這裏解釋。評論可能會被咱們的版主刪除,若是它們被執行或被認爲是無效的/脫離主題。
目前,此頁面的評論功能已被禁用。