久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java 如何遠(yuǎn)程控制tomcat啟動(dòng)關(guān)機(jī)

瀏覽:79日期:2022-08-14 10:57:40

最近我在考慮如何遠(yuǎn)程控制tomcat的啟動(dòng)和關(guān)機(jī),最后是有友好的界面,能夠?qū)崿F(xiàn)一鍵式操作的,這樣會(huì)肯定是會(huì)很方便的,網(wǎng)上找了半天,沒(méi)找到,有說(shuō)使用sheel腳本的,有在tomcat服務(wù)器上面安裝個(gè)客戶(hù)端的,這些都不是我所需要的,后來(lái)不經(jīng)意在網(wǎng)上找到一篇文章稍微講述了下,但是他寫(xiě)的不完整,一些關(guān)鍵的地方?jīng)]提到,還有一些地方寫(xiě)錯(cuò)了,我重新整理了下,在這里分享給大家。

首先,我下載了一個(gè)嶄新的tomcat,我選擇的是7版本的。

解壓后的界面如下圖所示:

java 如何遠(yuǎn)程控制tomcat啟動(dòng)關(guān)機(jī)

這里我們先來(lái)說(shuō)2個(gè)需要注意的問(wèn)題:

1. webapps下面有個(gè)文件夾叫**manager**,很多時(shí)候我們會(huì)把webapps下面的東西都刪了,然后再放我們的工程,其實(shí)這個(gè)文件夾是用來(lái)做tomcat管理的,我們要留著。

2. conf文件夾下面有個(gè)文件叫tomcat-users.xml,它是來(lái)做tomcat管理的用戶(hù)權(quán)限的

我們就是利用這兩塊內(nèi)容來(lái)實(shí)現(xiàn)對(duì)tomcat的遠(yuǎn)程控制的。

tomcat提供的manager項(xiàng)目提供了一些api,我們用到的有下面四個(gè):

1. http://localhost:9000/manager/text/list:可以得到此tomcat正在運(yùn)行的項(xiàng)目以及它們的狀態(tài)。

2. http://localhost:9000/manager/text/reload?path=/ROOT:重新部署一個(gè)項(xiàng)目ROOT項(xiàng)目

3. http://localhost:9000/manager/text/start?path=/ROOT:?jiǎn)?dòng)ROOT項(xiàng)目

4. http://localhost:9000/manager/text/stop?path=/ROOT:關(guān)閉ROOT項(xiàng)目

ROOT是我們控制的項(xiàng)目名稱(chēng),你可以根據(jù)你實(shí)際需要去改為你的項(xiàng)目名。

首先,我們通過(guò)http://localhost:9000/manager/text/list得到正在運(yùn)行的項(xiàng)目列表,得到的結(jié)果大概如下:

java 如何遠(yuǎn)程控制tomcat啟動(dòng)關(guān)機(jī)

我們來(lái)分析下這段結(jié)果,第一行我們忽略,代表的是tomcat在運(yùn)行,下面有一些項(xiàng)目在正常運(yùn)行。

我們來(lái)項(xiàng)目看看下面這些,以/examples:running:0:examples為例子,它有三個(gè):號(hào),第一個(gè):前的內(nèi)容我們忽略,running為正在運(yùn)行中(若為stopped則代表已經(jīng)停止),0代表狀態(tài)為正常(其他為異常)。

分析好我們就可以用java代碼來(lái)操作這些了。

具體代碼如下:

package com.baibin.utils;import sun.misc.BASE64Encoder;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.util.ArrayList;import java.util.List;public class TomcatHTMLUtil { public static String message(String operateURL) {StringBuffer dataResult = new StringBuffer();URL url = null;try { url = new URL(operateURL); URLConnection conn = (URLConnection) url.openConnection(); /** * 這里的用戶(hù)名和密碼是由tomcat的%tomcat_home%/conf/tomcat-users.xml里所配置的用戶(hù) */ String username = 'tomcat'; String password = 'tomcat'; String configuration = username + ':' + password; // manager角色的用戶(hù) String encodedPassword = new BASE64Encoder().encode(configuration.getBytes()); conn.setRequestProperty('Authorization', 'Basic ' + encodedPassword); InputStream is = conn.getInputStream(); BufferedReader bufreader = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = bufreader.readLine()) != null) {dataResult.append(line); }} catch (Exception e) { e.printStackTrace();}return dataResult.toString(); } /** * 獲取tomcat正在運(yùn)行的webApp的參數(shù) * * @return */ public List<WebApp> getTomcatWebAppData() {List<WebApp> webAppArrayList = new ArrayList<WebApp>();String data = TomcatHTMLUtil.message('http://localhost:9000/manager/text/list');String[] oldDataStrs = data.split('/');if (oldDataStrs[0].startsWith('OK')) { for (int i = 1; i < oldDataStrs.length; i++) {String[] names = oldDataStrs[i].split(':');//長(zhǎng)度為4 0 :忽略 1:狀態(tài) 2:0 狀態(tài) 3:名稱(chēng)WebApp webApp = new WebApp();webApp.setName(names[3]);if (names[1].equals('running')) { if (oldDataStrs[i].split(':')[2].equals('0')) {webApp.setStatus('運(yùn)行'); } else {webApp.setStatus('異常'); }} else if (names[1].equals('stopped')) { if (oldDataStrs[i].split(':')[2].equals('0')) {webApp.setStatus('停止'); } else {webApp.setStatus('異常'); }} else { webApp.setStatus('異常');}webAppArrayList.add(webApp); } //}}return webAppArrayList; } /** * 重新部署一個(gè)項(xiàng)目 * * @param webAppName * @return */ public boolean reloadWebApp(String webAppName) {String data = TomcatHTMLUtil.message('http://localhost:9000/manager/text/reload?path=/' + webAppName);if (data.startsWith('OK')) { return true;} else { return false;} } /** * 停止一個(gè)項(xiàng)目 * * @param webAppName * @return */ public boolean stopWebApp(String webAppName) {String data = TomcatHTMLUtil.message('http://localhost:9000/manager/text/stop?path=/' + webAppName);if (data.startsWith('OK')) { return true;} else { return false;} } /** * 開(kāi)始一個(gè)項(xiàng)目 * * @param webAppName * @return */ public boolean startWebApp(String webAppName) {String data = TomcatHTMLUtil.message('http://localhost:9000/manager/text/start?path=/' + webAppName);if (data.startsWith('OK')) { return true;} else { return false;} }}package com.baibin.utils;/** * Created by ibm on 2017/3/22. */public class WebApp { /** * 項(xiàng)目名稱(chēng) */ private String name; /** * 運(yùn)行狀態(tài) '成功' or '停止' */ private String status; @Override public String toString() {return 'WebApp{' +'name=’' + name + ’’’ +', status=’' + status + ’’’ +’}’; } public String getName() {return name; } public String getStatus() {return status; } public void setName(String name) {this.name = name; } public void setStatus(String status) {this.status = status; }}調(diào)用方式如下:

<body><% TomcatHTMLUtil util = new TomcatHTMLUtil(); /*啟動(dòng)ROOT項(xiàng)目*/ util.startWebApp('ROOT'); /*關(guān)閉ROOT項(xiàng)目*/ util.stopWebApp('ROOT');%></body>

這樣就可以遠(yuǎn)程控制了,前臺(tái)寫(xiě)的比較簡(jiǎn)單,還可以繼續(xù)優(yōu)化,當(dāng)然那不是重點(diǎn),這里就不寫(xiě)了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 宁阳县| 静宁县| 莒南县| 渭南市| 垦利县| 阜新| 泗水县| 巢湖市| 南和县| 邯郸县| 张掖市| 龙里县| 西林县| 图们市| 泰顺县| 江孜县| 武穴市| 科技| 岳西县| 石泉县| 金山区| 德江县| 新绛县| 淮滨县| 河池市| 韶关市| 五指山市| 湘西| 内丘县| 马关县| 贵南县| 沙田区| 库尔勒市| 黄浦区| 平江县| 卢龙县| 贵港市| 马鞍山市| 张家港市| 伊通| 淳安县|