中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何深入分析Tomcat的Manager

發布時間:2021-12-08 18:22:23 來源:億速云 閱讀:135 作者:柒染 欄目:大數據

如何深入分析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();
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

杭锦后旗| 来凤县| 北川| 巫山县| 肃宁县| 阳原县| 辽源市| 曲阳县| 洛扎县| 上杭县| 九台市| 彭山县| 康保县| 新乡县| 锡林浩特市| 赣榆县| 丹巴县| 津南区| 富裕县| 宁陵县| 库尔勒市| 许昌市| 永宁县| 克山县| 惠安县| 虞城县| 钦州市| 阳山县| 汤阴县| 泰和县| 泰顺县| 博客| 衡阳县| 临海市| 达尔| 绵阳市| 东海县| 阿勒泰市| 上高县| 琼海市| 金秀|