热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

这篇文章主要介绍了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 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 

调用方式如下:


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

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

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


推荐阅读
  • 解决CSS因MIME类型不匹配导致的加载失败问题
    本文详细介绍了在Web开发过程中,遇到CSS文件因MIME类型不匹配而无法正确加载的问题及其解决方案,适合前端开发者阅读。 ... [详细]
  • 本文详细介绍了如何手动编写兼容IE的Ajax函数,以及探讨了跨域请求的实现方法和原理,包括JSONP和服务器端设置HTTP头部等技术。 ... [详细]
  • 本文档整理了公司内部常用的网站链接和重要资源路径,包括部门周报、内控报销系统、邮件服务等,同时提供了相关数据库的登录信息。 ... [详细]
  • 本文介绍了jQuery的基本使用方法及AJAX技术的基础知识,包括选择器、事件处理、DOM操作、动画效果等核心功能,以及如何利用AJAX实现页面的部分刷新。 ... [详细]
  • 本文详细介绍了为何需要进行端口转发,尤其是从标准 HTTP 80 端口到 Tomcat 默认 8080 端口的必要性,以及如何通过 Nginx 实现这一功能。同时,还将探讨 Nginx 在不同场景下的多种端口转发策略。 ... [详细]
  • 统一幻灯片标题:使用母版功能的技巧
    本文详细介绍了如何通过PowerPoint中的幻灯片母版功能,实现所有幻灯片标题的一致性设置。同时,提供了其他办公软件和编程相关的实用技巧。 ... [详细]
  • 本文详细介绍如何在Android模拟器上安装TaintDroid的过程,包括解决源代码链接失效及服务器文件变动等问题,旨在帮助后续用户避免不必要的麻烦。 ... [详细]
  • 增强Tomcat安全性:有效防止后台攻击
    在构建可靠的系统架构时,确保安全是至关重要的一步。本文将重点探讨Tomcat这一流行的开源Web应用服务器的安全配置,以帮助开发者和运维人员提高其应用程序的安全性。 ... [详细]
  • PHP中的Content-Type含义及其功能解析
    在PHP中,Content-Type头部信息用于定义资源的媒体类型(MIME类型),这对于确保客户端正确解析服务器响应至关重要。 ... [详细]
  • 解析程序员与软件工程师的角色差异
    本文深入探讨了程序员与软件工程师之间的主要区别,包括它们的职业定位、技能要求以及工作内容等方面的不同,旨在帮助读者更好地理解这两个角色的特点。 ... [详细]
  • 本文详细介绍了MySQL在Linux环境下的主从复制技术,包括单向复制、双向复制、级联复制及异步复制等多种模式。主从复制架构中,一个主服务器(Master)可与一个或多个从服务器(Slave)建立连接,实现数据的实时同步。 ... [详细]
  • Redis 教程01 —— 如何安装 Redis
    本文介绍了 Redis,这是一个由 Salvatore Sanfilippo 开发的键值存储系统。Redis 是一款开源且高性能的数据库,支持多种数据结构存储,并提供了丰富的功能和特性。 ... [详细]
  • 本文探讨了为何DataWindow.NET在PowerBuilder 11之后版本中不再被支持,并提供了一种在PB12.5中恢复此功能的解决方案。欢迎交流与反馈。 ... [详细]
  • ###########性能监控脚本###########################!binbash#监控cpu系统负载IPifconfigeth0|grepinetaddr ... [详细]
  • ThinkPHP 文件缓存组件详解与应用
    本文深入探讨了ThinkPHP框架中的文件缓存类实现,提供了详细的代码示例和使用说明,旨在帮助开发者更好地理解和利用这一功能来优化应用程序性能。 ... [详细]
author-avatar
凉情__凉心凉少年11
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有