最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年04月19日 10:28:53   作者:白彬2017  
這篇文章主要介紹了java 遠(yuǎn)程控制tomcat啟動(dòng)關(guān)機(jī)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

最近我在考慮如何遠(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版本的。

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

這里寫(xiě)圖片描述

這里我們先來(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é)果大概如下:

這里寫(xiě)圖片描述

我們來(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è)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • springboot如何為web層添加統(tǒng)一請(qǐng)求前綴

    springboot如何為web層添加統(tǒng)一請(qǐng)求前綴

    這篇文章主要介紹了springboot如何為web層添加統(tǒng)一請(qǐng)求前綴,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • ElasticSearch自定義注解增刪改方式

    ElasticSearch自定義注解增刪改方式

    這篇文章主要介紹了ElasticSearch自定義注解增刪改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Mybatis單個(gè)參數(shù)的if判斷報(bào)異常There is no getter for property named ''xxx'' in ''class java.lang.Integer''的解決方案

    Mybatis單個(gè)參數(shù)的if判斷報(bào)異常There is no getter for property named ''x

    今天小編就為大家分享一篇關(guān)于Mybatis單個(gè)參數(shù)的if判斷報(bào)異常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • springboot-assembly自定義打包全過(guò)程

    springboot-assembly自定義打包全過(guò)程

    這篇文章主要介紹了springboot-assembly自定義打包全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 關(guān)于feign.codec.DecodeException異常的解決方案

    關(guān)于feign.codec.DecodeException異常的解決方案

    這篇文章主要介紹了關(guān)于feign.codec.DecodeException異常的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java裝飾者模式的深入了解

    Java裝飾者模式的深入了解

    這篇文章主要為大家介紹了Java裝飾者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • JAVA Netty實(shí)現(xiàn)聊天室+私聊功能的示例代碼

    JAVA Netty實(shí)現(xiàn)聊天室+私聊功能的示例代碼

    這篇文章主要介紹了JAVA Netty實(shí)現(xiàn)聊天室+私聊功能的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 深入淺析drools中Fact的equality?modes

    深入淺析drools中Fact的equality?modes

    這篇文章主要介紹了drools中Fact的equality?modes的相關(guān)知識(shí),本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • SpringBoot詳解MySQL如何實(shí)現(xiàn)讀寫(xiě)分離

    SpringBoot詳解MySQL如何實(shí)現(xiàn)讀寫(xiě)分離

    當(dāng)響應(yīng)的瓶頸在數(shù)據(jù)庫(kù)的時(shí)候,就要考慮數(shù)據(jù)庫(kù)的讀寫(xiě)分離,當(dāng)然還可以分庫(kù)分表,那是單表數(shù)據(jù)量特別大,當(dāng)單表數(shù)據(jù)量不是特別大,但是請(qǐng)求量比較大的時(shí)候,就要考慮讀寫(xiě)分離了.具體的話(huà),還是要看自己的業(yè)務(wù)...如果還是很慢,那就要分庫(kù)分表了...我們這篇就簡(jiǎn)單講一下讀寫(xiě)分離
    2022-09-09
  • JDK版本修改不生效的解決方法

    JDK版本修改不生效的解決方法

    本文主要介紹了在配置新電腦環(huán)境時(shí)遇到JDK版本切換失敗的問(wèn)題,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03

最新評(píng)論

城步| 周口市| 木里| 镇宁| 崇文区| 莲花县| 胶南市| 新巴尔虎左旗| 县级市| 巴林左旗| 襄樊市| 红安县| 五台县| 桃园市| 庆阳市| 隆安县| 彭州市| 遂溪县| 嘉荫县| 清流县| 青海省| 鹤壁市| 尼勒克县| 额济纳旗| 江口县| 莎车县| 沈阳市| 红河县| 陆良县| 江门市| 富顺县| 廉江市| 新竹县| 北碚区| 正宁县| 安阳县| 唐河县| 城口县| 林周县| 崇礼县| 吉安市|