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

网友投稿 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 getTomcatWebAppData() {

List webAppArrayList = new ArrayList();

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小时内删除侵权内容。

上一篇:PPP PAP 认证
下一篇:交换机的端口安全
相关文章

 发表评论

暂时没有评论,来抢沙发吧~