怎么用Java来实现控制Tomcat服务启动后停止与停止

2423人阅读
tomcat(1)
java(13)
最近项目需要做一个可以动态添加webApp并且做个桌面程序来监控tomcat中部署的webApp的状态以及控制项目的启动与停止,在度娘上搜资料,这一篇介绍的很全面,链接:/blog/953387,又经过一番研究之后,总结了一套简单可行的方案,核心技术文档参见apache tomcat文档(采用授权url的方式控制,类似于常见的localhost:8080网页控制):http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#List_Currently_Deployed_Applications
步骤如下:
①:首先授权用户使获得这些权限
You can find the role names in the web.xml file of the Manager web application. The available roles are:
manager-gui — Access to the HTML interface.
manager-status — Access to the “Server Status” page only.
manager-script — Access to the tools-friendly plain text interface that is described in this document, and to the “Server Status” page.
manager-jmx — Access to JMX proxy interface and to the “Server Status” page.
具体方法:修改/conf目录下的tomcat-users.xml文件,添加如下代码:
rolename="manager-status"/&
rolename="manager"/&
rolename="manager-jmx"/&
rolename="manager-gui"/&
rolename="manager-script"/&
rolename="admin"/&
username="admin" password="123456" roles="manager,manager-gui,admin,manager-status,manager-jmx,manager-script"/&
这里创建一个admin 密码为123456的用户
②:创建通用tomcatUtil方法:
public class TomcatHTMLUtil {
public static String message(String operateURL) {
StringBuffer dataResult = new StringBuffer()
URL url = null
url = new URL(operateURL)
URLConnection conn = (URLConnection) url.openConnection()
//这里我是把admin,123456 这个用户信息放到了一个json文件中以json形式存放,然后取出来,如果不是以这种方式存放,则可以直接设置username = admin ,password =123456
String data = FileUtil.readJson()
String username = data.substring(1,data.length()-1).split(",")[0].split(":")[1].substring
(1,data.substring(1,data.length()-1).split(",")[0].split(":")[1].length()-1)
String password =data.substring(1,data.length()-1).split(",")[1].split(":")[1].substring
(1,data.substring(1,data.length()-1).split(",")[0].split(":")[1].length())
String configuration = username+":"+password
String encodedPassword = new BASE64Encoder().encode(configuration.getBytes())
conn.setRequestProperty("Authorization", "Basic " + encodedPassword)
// URL授权访问 -- End
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的参数
public ArrayList&WebApp& getTomcatWebAppData(){
ArrayList&WebApp& webAppArrayList = new ArrayList&WebApp&();
String data = TomcatHTMLUtil.message("http://localhost:8080/manager/text/list");
String[] oldDataStrs = data.split("/");
if(oldDataStrs[0].startsWith("OK")){
for (int i = 0; i & oldDataStrs. i++) {
String name = oldDataStrs[i].split(":")[0];
if(name.startsWith("legacy-proxy")){
WebApp webApp = new WebApp();
webApp.setName(name);
if(oldDataStrs[i].split(":")[1].equals("running")){
if(oldDataStrs[i].split(":")[2].equals("0")){
webApp.setStatus("运行");
webApp.setStatus("异常");
else if(oldDataStrs[i].split(":")[1].equals("stopped")){
if(oldDataStrs[i].split(":")[2].equals("0")){
webApp.setStatus("停止");
webApp.setStatus("异常");
webApp.setStatus("异常");
webAppArrayList.add(webApp);
return webAppArrayL
* 重新部署一个项目
* webAppName
public boolean reloadWebApp(String webAppName){
String data = TomcatHTMLUtil.message("http://localhost:8080/manager/text/reload?path=/"+webAppName);
if(data.startsWith("OK")){
return true;
return false;
* 停止一个项目
* webAppName
public boolean stopWebApp(String webAppName){
String data = TomcatHTMLUtil.message("http://localhost:8080/manager/text/stop?path=/"+webAppName);
if(data.startsWith("OK")){
return true;
return false;
* 开始一个项目
* webAppName
public boolean startWebApp(String webAppName){
String data = TomcatHTMLUtil.message("http://localhost:8080/manager/text/start?path=/"+webAppName);
if(data.startsWith("OK")){
return true;
return false;
webApp的domain对象:
* Created by Administrator on .
* webApp的相关信息
public class WebApp {
* 项目名称
* 运行状态 "成功" or "停止"
public String getName() {
public String getStatus() {
public void setName(String name) {
this.name =
public void setStatus(String status) {
this.status =
基本上核心功能已经出来了,剩下的就是写桌面swing程序了,我就不贴代码了
OK,完成收工,其实是很简单的。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:145672次
积分:1479
积分:1479
排名:千里之外
原创:51篇
转载:16篇
(3)(4)(7)(3)(1)(1)(3)(3)(1)(1)(5)(3)(4)(1)(3)(1)(2)(1)(2)(1)(1)(1)(1)(1)(1)(1)(3)(1)(2)(1)(4)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'本帖子已过去太久远了,不再提供回复功能。如何解决tomcat无法启动问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
如何解决tomcat无法启动问题
&&如何解决tomcat无法启动问题
你可能喜欢最近我在考虑如何远程控制tomcat的启动和关机,最后是有友好的界面,能够实现一键式操作的,这样会肯定是会很方便的,网上找了半天,没找到,有说使用sheel脚本的,有在tomcat服务器上面安装个客户端的,这些都不是我所需要的,后来不经意在网上找到一篇文章稍微讲述了下,但是他写的不完整,一些关键的地方没提到,还有一些地方写错了,我重新整理了下,在这里分享给大家。
首先,我下载了一个崭新的tomcat,我选择的是7版本的,下载地址:[tomcat下载](http://mirrors.tuna./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管理的用户权限的,具体的请大家看这位朋友的文章([这里写链接内容](/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.
import sun.misc.BASE64E
import java.io.BufferedR
import java.io.InputS
import java.io.InputStreamR
import java.net.URL;
import java.net.URLC
import java.util.ArrayL
import java.util.L
public class TomcatHTMLUtil {
public static String message(String operateURL) {
StringBuffer dataResult = new StringBuffer();
URL url = null;
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 + ":" +
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的参数
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. i++) {
String[] names = oldDataStrs[i].split(":");
WebApp webApp = new WebApp();
webApp.setName(names[3]);
if (names[1].equals("running")) {
if (oldDataStrs[i].split(":")[2].equals("0")) {
webApp.setStatus("运行");
webApp.setStatus("异常");
} else if (names[1].equals("stopped")) {
if (oldDataStrs[i].split(":")[2].equals("0")) {
webApp.setStatus("停止");
webApp.setStatus("异常");
webApp.setStatus("异常");
webAppArrayList.add(webApp);
return webAppArrayL
* 重新部署一个项目
* webAppName
public boolean reloadWebApp(String webAppName) {
String data = TomcatHTMLUtil.message("http://localhost:9000/manager/text/reload?path=/" + webAppName);
if (data.startsWith("OK")) {
return true;
return false;
* 停止一个项目
* webAppName
public boolean stopWebApp(String webAppName) {
String data = TomcatHTMLUtil.message("http://localhost:9000/manager/text/stop?path=/" + webAppName);
if (data.startsWith("OK")) {
return true;
return false;
* 开始一个项目
* webAppName
public boolean startWebApp(String webAppName) {
String data = TomcatHTMLUtil.message("http://localhost:9000/manager/text/start?path=/" + webAppName);
if (data.startsWith("OK")) {
return true;
return false;
package com.baibin.
* Created by ibm on .
public class WebApp {
* 项目名称
* 运行状态 "成功" or "停止"
public String toString() {
return "WebApp{" +
"name='" + name + '\'' +
", status='" + status + '\'' +
public String getName() {
public String getStatus() {
public void setName(String name) {
this.name =
public void setStatus(String status) {
this.status =
调用方式如下:
TomcatHTMLUtil util = new TomcatHTMLUtil();
util.startWebApp("ROOT");
util.stopWebApp("ROOT");
这样就可以远程控制了,前台写的比较简单,还可以继续优化,当然那不是重点,这里就不写了,有疑问的朋友可以在评论里和我互动讨论。
本文已收录于以下专栏:
相关文章推荐
转自:http://blog.csdn.net/abc_key/article/details/
Java NIO服务器:远程主机强迫关闭了一个现有的连接
在日常开发中,有时需要对远程服务器上的应用进行远程调试,对于tomcat,要进行远程调试其实很简单,只需要在启动tomcat时开启jpda服务即可。
什么是JPDA呢?
JPDA(Java Pla...
新建一个bat文件,将下面的代码复制到bat并执行即可。
备注:需要修改登录账号、密码、IP
echo login on
echo set sh=WScript.Creat...
http://www./club/?uid-117-action-viewspace-itemid-985
偶然发现的非常有用的远程控制TOMCAT重启的一种方法,非常实用...
测试成功,我说的方法没有问题,jsp 代码如下:@ page language=&java& contentType=&text/ charset=GB18030& pageEncoding...
一,准备工作,建立spring-boot-sample-mysql工程
1、http://start.spring.io/
     A、Artifact中输入spring-boot-sample-...
微信APP支付,在“统一下单”里加签没有问题,调用成功,但是在 “调起支付”后却提示
支付验证签名失败。
转自:http://blog.csdn.net/afgasdg/article/details/9236877
PS:文中容易引起歧义的地方已经做了修改;另外,本人参照以下步骤操作,结果无法调试,后...
微信公众号支付总结:做完了微信支付想趁着这把火没灭继续把公众号支付也做完,但是没想到中途出了呢么多意外,每次都是感觉解决了这个问题就可以支付了,但每次都是一个问题接另一个问题的出现,特此总结一下出现的...
好长时间没有写文章了,有点懈怠了...最近在为公司开发Eclipse插件,需要有用到嵌入式Tomcat的地方,所以上网查找资料研究了一下。
    开始时是想用Runtime.exec方法来操作普通...
他的最新文章
讲师:姜飞俊
讲师:汪木铃
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 css3实现鼠标悬浮停止 的文章

 

随机推荐