java 单机接口限流处理方案
272
2022-10-28
java 如何远程控制tomcat启动关机
最近我在考虑如何远程控制tomcat的启动和关机,最后是有友好的界面,能够实现一键式操作的,这样会肯定是会很方便的,网上找了NxoivcuU半天,没找到,有说使用sheel脚本的,有在tomcat服务器上面安装个客户端的,这些都不是我所需要的,后来不经意在网上找到一篇文章稍微讲述了下,但是他写的不完整,一些关键的地方没提到,还有一些地方写错了,我重新整理了下,在这里分享给大家。
首先,我下载了一个崭新的tomcat,我选择的是7版本的。
解压后的界面如下图所示:
这里我们先来说2个需要注意的问题:
1. webapps下面有个文件夹叫**manager**,很多时http://候我们会把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项目
3http://. 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
List
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(":")http://[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;
}
}
调用方式如下:
<%
TomcatHTMLUtil util = new TomcatHTMLUtil();
/*启动ROOT项目*/
util.startWebApp("ROOT");
/*关闭ROOT项目*/
util.stopWebApp("ROOT");
%>
这样就可以远程控制了,前台写的比较简单,还可以继续优化,当然那不是重点,这里就不写了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~