您好,登錄后才能下訂單哦!
如何深入分析Tomcat的Manager,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
關心Tomcat,使用過Tomcat的朋友,一定使用過它的管理應用,就是webapps目錄下的manager。
默認啟動Tomcat后,Tomcat 7.0之前版本的,通過點擊位于Tomcat的ROOT應用主界面的左側鏈接,可以進入manager應用,Tomcat7.0之后,界面變成了下面的這個樣了。通過點擊Manager App可以訪問manager應用。
無論哪個版本,要使用manager應用有一個前提:
是需要用戶名密碼的。
因為manager app設置了BASIC的登錄驗證方式,所以使用前需要先配置conf/tomcat-users.xml文件。
在其中增加:
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui"/>
其中,username和password可以隨意改,那roles中用于設置該用戶屬于哪個角色,如果要使用manager應用,就需要給其賦予manager-gui這個角色。
為什么是這個角色呢?
看這里:
位于webapps/manager/WEB-INF/web.xml文件中,有如下定義:
<!-- Define the Login Configuration for this Application -->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Tomcat Manager Application</realm-name>
</login-config>
<!-- Security roles referenced by this web application -->
<security-role>
<role-name>manager-gui</role-name>
</security-role>
就是我們上面提到使用的校驗方式為BASIC,而具體的角色定義是manager-gui。
配置好tomcat-users.xml中的用戶和角色后,就可以使用其管理Tomcat了。
進入manager應用,進入視線的是應用的列表
可以控制應用的啟動停止,重新加載,卸載。可以使Session失效等。
這里我們能和Tomcat開發者學到的一個好的實踐是
可以用來操作已部署應用生命周期的管理級別的應用,默認情況下是不允許使用的,只有配置過用戶才能使用,從而避免一些線上的應用被黑。我們可以想像一下,如果默認就可以隨便使用,那如果這個配置沒有更改,情況就不容樂觀了。
在列表塊下,是用于應用部署的模塊
這里支持兩種形式的部署
使用配置文件直接部署
通過選擇具體的WAR文件進行部署
再向下則是系統分析的接口,以及獲取Server信息的接口
我們再摘選一段源碼,分析下manager應用。
manager應用的源碼位于Tomcat源碼的org.apache.catalina.manager包下。
主類為ManagerServlet這個類。以列所有部署的應用為例,我們看下具體實現
由于默認輸出的是html格式的內容,最終定向到的類是HTMLManagerServlet,這是ManagerServet的一個子類。
其中,輸出應用列表的代碼如下:
// 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 = "/";
} }}
注意標紅的幾行代碼,manager應用是通過Host這個組件,來獲取該組件下所有的應用信息,先獲取所有應用的名稱,再通過名稱,再獲取其對應的具體信息,并將其接成HTML內容輸出。
從上面的代碼,我們可以和Tomcat開發者學到的一個不錯的實踐,是將對應修改BUG的標號和代碼對應起來,在其它人維護系統時,可以更方便。
在部署一個應用時,首先需要檢查下該應用的前綴(ContextRoot)是否已經存在,因為不允許應用存在重名的情況,這個名稱檢測,用的就是JMX的實現
代碼如下:
/**
* 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();
}
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。