java远程控制tomcat启动关机

xiaoxiao2021-02-28  110

作者: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; } } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 调用方式如下: <body> <% TomcatHTMLUtil util = new TomcatHTMLUtil(); /*启动ROOT项目*/ util.startWebApp("ROOT"); /*关闭ROOT项目*/ util.stopWebApp("ROOT"); %> </body> 123456789 这样就可以远程控制了,前台写的比较简单,还可以继续优化,
转载请注明原文地址: https://www.6miu.com/read-30791.html

最新回复(0)