java远程控制tomcat启动关机

来源:互联网 发布:算命软件哪个最准最全 编辑:程序博客网 时间:2024/06/06 23:42

作者:baibinboss-----感谢原创,感谢作者!!

 最近我在考虑如何远程控制tomcat的启动和关机,最后是有友好的界面,能够实现一键式操作的,这样会肯定是会很方便的,网上找了半天,没找到,有说使用sheel脚本的,有在tomcat服务器上面安装个客户端的,这些都不是我所需要的,后来不经意在网上找到一篇文章稍微讲述了下,但是他写的不完整,一些关键的地方没提到,还有一些地方写错了,我重新整理了下,在这里分享给大家。首先,我下载了一个崭新的tomcat,我选择的是7版本的,下载地址:[tomcat下载](http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.76/bin/apache-tomcat-7.0.76.zip)。    解压后的界面如下图所示:

这里写图片描述

    这里我们先来说2个需要注意的问题:     1. webapps下面有个文件夹叫**manager**,很多时候我们会把webapps下面的东西都删了,然后再放我们的工程,其实这个文件夹是用来做tomcat管理的,我们要留着。     2. conf文件夹下面有个文件叫tomcat-users.xml,它是来做tomcat管理的用户权限的,具体的请大家看这位朋友的文章([这里写链接内容](http://www.365mini.com/page/tomcat-manager-user-configuration.htm))    我们就是利用这两块内容来实现对tomcat的远程控制的。    tomcat提供的manager项目提供了一些api,我们用到的有下面四个:         1. http://localhost:9000/manager/text/list:可以得到此tomcat正在运行的项目以及它们的状态。         2. http://localhost:9000/manager/text/reload?path=/ROOT:重新部署一个项目ROOT项目         3. http://localhost:9000/manager/text/start?path=/ROOT:启动ROOT项目         4. http://localhost:9000/manager/text/stop?path=/ROOT:关闭ROOT项目     ROOT是我们控制的项目名称,你可以根据你实际需要去改为你的项目名。    首先,我们通过http://localhost:9000/manager/text/list得到正在运行的项目列表,得到的结果大概如下:

这里写图片描述 
我们来分析下这段结果,第一行我们忽略,代表的是tomcat在运行,下面有一些项目在正常运行。我们来项目看看下面这些,以/examples:running:0:examples为例子,它有三个:号,第一个:前的内容我们忽略,running为正在运行中(若为stopped则代表已经停止),0代表状态为正常(其他为异常)。分析好我们就可以用java代码来操作这些了。具体代码如下:

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();            /**             * 这里的用户名和密码是由tomcat的%tomcat_home%/conf/tomcat-users.xml里所配置的用户             */            String username = "tomcat";            String password = "tomcat";            String configuration = username + ":" + password; // manager角色的用户            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正在运行的webApp的参数     *     * @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(":");//长度为4 0 :忽略 1:状态 2:0 状态   3:名称                WebApp webApp = new WebApp();                webApp.setName(names[3]);                if (names[1].equals("running")) {                    if (oldDataStrs[i].split(":")[2].equals("0")) {                        webApp.setStatus("运行");                    } 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;    }    /**     * 重新部署一个项目     *     * @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;        }    }    /**     * 停止一个项目     *     * @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;        }    }    /**     * 开始一个项目     *     * @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 {    /**     * 项目名称     */    private String name;    /**     * 运行状态 "成功" 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;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
调用方式如下:
<body><%    TomcatHTMLUtil util = new TomcatHTMLUtil();    /*启动ROOT项目*/    util.startWebApp("ROOT");    /*关闭ROOT项目*/    util.stopWebApp("ROOT");%></body>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
    这样就可以远程控制了,前台写的比较简单,还可以继续优化,