java 如何远程控制tomcat启动关机

最近我在考虑如何远程控制tomcat的启动和关机,最后是有友好的界面,能够实现一键式操作的,这样会肯定是会很方便的,网上找了半天,没找到,有说使用sheel脚本的,有在tomcat服务器上面安装个客户端的,这些都不是我所需要的,后来不经意在网上找到一篇文章稍微讲述了下,但是他写的不完整,一些关键的地方没提到,还有一些地方写错了,我重新整理了下,在这里分享给大家。

首先,我下载了一个崭新的tomcat,我选择的是7版本的。

解压后的界面如下图所示:

这里我们先来说2个需要注意的问题:

1. webapps下面有个文件夹叫**manager**,很多时候我们会把webapps下面的东西都删了,然后再放我们的工程,其实这个文件夹是用来做tomcat管理的,我们要留着。

2. conf文件夹下面有个文件叫tomcat-users.xml,它是来做tomcat管理的用户权限的

我们就是利用这两块内容来实现对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;
    }
}

调用方式如下:

<body>
<%
    TomcatHTMLUtil util = new TomcatHTMLUtil();
    /*启动ROOT项目*/
    util.startWebApp("ROOT");
    /*关闭ROOT项目*/
    util.stopWebApp("ROOT");
%>
</body>

这样就可以远程控制了,前台写的比较简单,还可以继续优化,当然那不是重点,这里就不写了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Spring通过Java配置集成Tomcat的方法

    添加Tomcat依赖 <!-- 自己编译的版本--> <dependency> <groupId>org.apache</groupId> <artifactId>apache-tomcat-9.0.36-src</artifactId> <version>1.0-SNAPSHOT</version> </dependency> 首先需要一个tomcat启动类 public class Tomcat

  • Java(JDK/Tomcat/Maven)运行环境配置及工具(idea/eclipse)安装详细教程

    Java(计算机编程语言) Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程. Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点. Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等. Java环境配置(

  • java 通过cmd 调用命令启动tomcat的操作

    我们有时候为了方便,公司会做一个项目管理,便于启动和关闭我们部署在服务器上面的项目,我这里就采用了java的方式,嗯......仅限于参考...... public static void main(String args[]) throws IOException { String exec = "C:/software/apache-tomcat-8.5.24/bin/startup.bat"; Runtime runtime = Runtime.getRuntime(); run

  • Java虚拟机使用jvisualvm工具远程监控tomcat内存

    jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的java进程的内存占用,线程状态等信息. 一.配置tomcat 在tomcat的catalina.sh文件开头加上如下配置: JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=fa

  • Java tomcat环境变量及idea配置解析

    一.下载Tomcat 1.进入官网http://tomcat.apache.org/,选择download,下载所需Tomcat版本. 二,我们解压后到指定目录,然后配置环境变量 1>CATALINA_BASE和CATALINA_HOME,值都是tomact地址目录 2>CLASSPATH,在值后面添加;%CATALINA_HOME%\lib\servlet-api.jar;(PS::这个符号是有的) 3>添加Path值,%CATALINA_HOME%\bin和%CATALINA_HOM

  • Java项目开启远程调试的方法步骤(tomcat、springboot)

    当我们运行一个项目的时候,一般都是在本地进行debug.但是如果是一个分布式的微服务,这时候我们选择远程debug是我们开发的利器. 环境 apache-tomcat-8.5.16 Linux 如何启用远程调试 tomcat开启远程调试 方法 切换到你的tomcat的bin目录/apache-tomcat-8.5.16/bin 下,执行: ./catalina.sh jpda start 执行上面的命令就可以开启远程debug了,如果想配置一些信息,比如端口号什么的,请参考下面的说明. 参数说明

  • java 如何远程控制tomcat启动关机

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

  • Tomcat启动时报错:java.lang.UnsatisfiedLinkError的解决

    问题 之前tomcat启动老是报错,虽然不影响项目的启动运行,但是有强迫症的程序员会心里不爽: 如下: 问题分析 由于本机安装的jdk版本与tomcat中使用的jdk版本不一致导致的. 解决方法 后面我把原先tomcat启动环境用的jdk1.7改为了本机安装的jdk1.8就不在报错. 具体过程: 在myeclipse中点击window→preference→在搜索框中输入Tomcat→选择安装的tomcat版本,我这里是选择Tomcat 7.x→点击JDK→在Tomcat 7.x JDK nam

  • 详解Windows下调整Tomcat启动参数的实现方法

    Windows下调整Tomcat启动参数  Tomcat默认可以使用的内存为128MB,对于访问数比较多.比较吃内存的应用来说,这是不够的.我们可以通过调整Java虚拟机的启动参数来增加Tomcat可使用的内存. 下面就是众所周知的两个参数 -Xms<size> JVM初始化堆的大小 -Xmx<size> JVM堆的最大值 比如,我想设置初始内存大小为128M,最多占用1G,就是下面的设置: -Xms128m -Xmx1024m 在Linux/Unix下,可以通过在 {tomcat

  • Tomcat 启动时 SecureRandom 非常慢解决办法

    Tomcat 启动时 SecureRandom 非常慢解决办法 最近使用阿里云的 Ubuntu 16.04 ESC 服务器运行 Tomcat 时发现,Tomcat 启动的特别慢,通过查看日志,发现时间主要花在实例化 SecureRandom 对象上了. 由该日志可以看出,实例化该对象使用了253秒,导致整个应用启动了275秒之久. 注意这条日志: org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation

  • Tomcat启动成功访问主页失败的原因解决方案

    Tomcat启动成功访问主页失败的原因解决方案 如果在 网上搜一圈"tomcat启动成功,当输入http://localhost:8080报404错误".有说查看日志定位问题的,有说检查端口有没有冲突,建议去server.xml修改端口的:有建议在cmd命令中输入netstat -ano查看tomcat端口是否已经被使用的:也有说环境变量配置有问题的. 这些可能都是对的,但还有一种情况容易被忽视:tomcat,webapps目录下没有ROOT文件夹! 有经验的人看到这个可能会淡淡的一笑

  • Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)

    用文本编辑工具打开用于启动Tomcat的批处理文件startup.bat,仔细阅读.在这个文件中,首先判断CATALINA_HOME环境变量是否为空,如果为空,就将当前目录设为CATALINA_HOME的值.接着判断当前目录下是否存在bin\catalina.bat,如果文件不存在,将当前目录的父目录设为CATALINA_HOME的值.根据笔者机器上Tomcat安装目录的层次结构,最后CATALINA_HOME的值被设为Tomcat的安装目录.如果环境变量CATALINA_HOME已经存在,则通

  • Tomcat启动失败的问题排查与解决

    前言 最近在某应用更新代码后部分机器发布失败,发布失败的机器上Tomcat一直没有启动成功,日志卡在Deploying web application,重启数次之后仍然是一样的情况.所以进行排查问题,下面记录了所有的排查过程,需要的朋友们可以参考学习. 排查过程 1. Tomcat启动线程卡住 下文中Tomcat启动线程代指线程名为localhost-startStop-$id的线程. 使用jstack打印出Tomcat的线程堆栈: jstack `jps |grep Bootstrap |aw

  • 非常实用的Tomcat启动脚本实现方法

    前言 有这样一个场景,公司为了安全起见,需要对所有登录Linux服务器做安全限制,要求除了管理员其他要登录linux服务器的员工不能用最高权限账号登录,要创建新的用户,对目录及文件权限做出控制,只能对需要操作的目录允许读,写,执行权限,其他目录只有读的权限,并且所有tomcat不能直接在bin中用startup.sh,shutdown.sh进行启动和停止,要通过写shell脚本进行此操作,也就是说有两个步骤,创建用户并设置权限,写tomcat启动脚本,下面我们就完成这两个步骤. 1.首先我们就来

  • Java开启/关闭tomcat服务器的方法

    1.项目结构 2.CallTomcat.java package com.calltomcat.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class CallTomcat { public static void main(String[] args) { //String command = "E:\\apache-tomca

  • Java应用服务器之tomcat部署的详细教程

    一.相关术语简介 首先我们来了解下tomcat是什么,tomcat是apache软件基金会中的一个项目,由apache.Sun 和其他一些公司及个人共同开发而成.主要作用是提供servlet和jsp类库:tomcat是一个免费开源的web服务器,它和nginx.httpd服务不同的是,它不擅长处理HTML代码,更多的是处理JSP程序:有点类似fpm服务专门处理php程序: jdk:java开发工具箱(Java Development Kit),主要提供java开发相关工具包,库文件以及jre和j

随机推荐