如何深入分析Tomcat的Manager,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比越城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式越城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋越城地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
關(guān)心Tomcat,使用過Tomcat的朋友,一定使用過它的管理應(yīng)用,就是webapps目錄下的manager。
默認啟動Tomcat后,Tomcat 7.0之前版本的,通過點擊位于Tomcat的ROOT應(yīng)用主界面的左側(cè)鏈接,可以進入manager應(yīng)用,Tomcat7.0之后,界面變成了下面的這個樣了。通過點擊Manager App可以訪問manager應(yīng)用。
無論哪個版本,要使用manager應(yīng)用有一個前提:
是需要用戶名密碼的。
因為manager app設(shè)置了BASIC的登錄驗證方式,所以使用前需要先配置conf/tomcat-users.xml文件。
在其中增加:
其中,username和password可以隨意改,那roles中用于設(shè)置該用戶屬于哪個角色,如果要使用manager應(yīng)用,就需要給其賦予manager-gui這個角色。
為什么是這個角色呢?
看這里:
位于webapps/manager/WEB-INF/web.xml文件中,有如下定義:
BASIC
Tomcat Manager Application
manager-gui
就是我們上面提到使用的校驗方式為BASIC,而具體的角色定義是manager-gui。
配置好tomcat-users.xml中的用戶和角色后,就可以使用其管理Tomcat了。
進入manager應(yīng)用,進入視線的是應(yīng)用的列表
可以控制應(yīng)用的啟動停止,重新加載,卸載??梢允筍ession失效等。
這里我們能和Tomcat開發(fā)者學(xué)到的一個好的實踐是
可以用來操作已部署應(yīng)用生命周期的管理級別的應(yīng)用,默認情況下是不允許使用的,只有配置過用戶才能使用,從而避免一些線上的應(yīng)用被黑。我們可以想像一下,如果默認就可以隨便使用,那如果這個配置沒有更改,情況就不容樂觀了。
在列表塊下,是用于應(yīng)用部署的模塊
這里支持兩種形式的部署
使用配置文件直接部署
通過選擇具體的WAR文件進行部署
再向下則是系統(tǒng)分析的接口,以及獲取Server信息的接口
我們再摘選一段源碼,分析下manager應(yīng)用。
manager應(yīng)用的源碼位于Tomcat源碼的org.apache.catalina.manager包下。
主類為ManagerServlet這個類。以列所有部署的應(yīng)用為例,我們看下具體實現(xiàn)
由于默認輸出的是html格式的內(nèi)容,最終定向到的類是HTMLManagerServlet,這是ManagerServet的一個子類。
其中,輸出應(yīng)用列表的代碼如下:
// Apps Row Section
// Create sorted map of deployed applications by context name.
Container children[] = host.findChildren();
String contextNames[] = new String[children.length];
for (int i = 0; i < children.length; i++)
contextNames[i] = children[i].getName();
Arrays.sort(contextNames);
for (String contextName : contextNames) {
Context ctxt = (Context) host.findChild(contextName);
if (ctxt != null) {
// Bugzilla 34818, alternating row colors
String contextPath = ctxt.getPath();
String displayPath = contextPath;
if (displayPath.equals("")) {
displayPath = "/";
} }}
注意標(biāo)紅的幾行代碼,manager應(yīng)用是通過Host這個組件,來獲取該組件下所有的應(yīng)用信息,先獲取所有應(yīng)用的名稱,再通過名稱,再獲取其對應(yīng)的具體信息,并將其接成HTML內(nèi)容輸出。
從上面的代碼,我們可以和Tomcat開發(fā)者學(xué)到的一個不錯的實踐,是將對應(yīng)修改BUG的標(biāo)號和代碼對應(yīng)起來,在其它人維護系統(tǒng)時,可以更方便。
在部署一個應(yīng)用時,首先需要檢查下該應(yīng)用的前綴(ContextRoot)是否已經(jīng)存在,因為不允許應(yīng)用存在重名的情況,這個名稱檢測,用的就是JMX的實現(xiàn)
代碼如下:
/**
* Invoke the isDeployed method on the deployer.
*/
protected boolean isDeployed(String name)
throws Exception {
String[] params = { name };
String[] signature = { "java.lang.String" };
Boolean result =
(Boolean) mBeanServer.invoke(oname, "isDeployed", params, signature);
return result.booleanValue();
}
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。