Asp.net控制Tomcat启动关闭的实现方法

 更新时间:2021年9月22日 10:18  点击:2308
一、场景
近日有个项目客户要求能自己配置相关权限。由于历史原因这个项目采用的是公司以前的权限系统。这个权限系统很强大,不过有个弊端,就是每增加一个权限菜单都要重启才能生效,不然就要等1天它缓存过期后才生效。由于项目进度我们不可能将这个权限系统推翻重来。
  可行的方式是在管理员操作界面上增加权限系统重启按钮。这样客户在修改权限后可以很方便的重启Tomcat。
二、技术分析
由于管理员系统是基于.net的BS方式。所以我们要能通过网页控制Tomcat的关闭启动,并加载进管理员系统中。
  首先分析Tomcat的启动方式。在Tomcat6.0的bin目录下有两个批处理文件。startup.bat和shutdown.bat分别控制着Tomcat的启动和关闭。我们要控制Tomcat的启动关闭就得调用这两个批处理文件。
怎么调呢?在哪调呢?浏览器直接调那是不可能的。必须得在web服务器上部署个web页面,在服务端调用这两个命令。如果部署在权限系统内部那是最好的,不过这会产生一个问题,我们可以关闭Tomcat,但却无法启动。最终的方案是在同一台机子上部署个.net实现的webservice,通过这个webservice实现权限系统的启动和关闭。
三、具体实现
  在VS2008中创建一个web service项目。
  创建两个WebMethod。
  1.启动Tomcat方法
复制代码 代码如下:

/// <summary>
/// 启动权限系统
/// </summary>
/// <returns>true:成功;false:失败</returns>
[WebMethod]
public bool StartPM()
{
try
{
// 创建进程启动信息
ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "start.bat");
// 获取系统环境变量
IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
foreach (string key in dics.Keys)
{// 将系统环境变量加入新进程环境变量中
if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;
sinfo.EnvironmentVariables.Add(key, dics[key].ToString());
}
// 不需要从系统外壳程序创建,直接从文件创建
sinfo.UseShellExecute = false;
Process.Start(sinfo);
}
catch (Exception ex)
{
//TODO: 写日志
return false;
}
return true;
}

.关闭Tomcat方法
复制代码 代码如下:

/// <summary>
/// 关闭权限系统
/// </summary>
/// <returns>true:成功;false:失败</returns>
[WebMethod]
public bool StopPM()
{
try
{
// 创建进程启动信息
ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "stop.bat");
// 获取系统环境变量
IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
foreach (string key in dics.Keys)
{// 将系统环境变量加入新进程环境变量中
if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;
sinfo.EnvironmentVariables.Add(key, dics[key].ToString());
}
// 不需要从系统外壳程序创建,直接从文件创建
sinfo.UseShellExecute = false;
Process.Start(sinfo);
}
catch (Exception ex)
{
//TODO: 写日志
return false;
}
return true;
}

为了方便以后配置我有新建了两个bat文件。在这两个文件中分别做调用Tomcat的startup.bat和shutdown.bat的操作。具体如下:
  1.start.bat  
复制代码 代码如下:
K:\apache-tomcat-6.0.30\bin\startup.bat

  2.stop.bat
复制代码 代码如下:
K:\apache-tomcat-6.0.30\bin\shutdown.bat

四、总结
  整个开发过程中出现了无法找到CATALINA_HOME、JAVA_HOME环境变量的错误,那是因为父进程也就是web service的环境变量中并没有这两项,所以创建子进程时(子进程的环境变量继承于父进程)也没有这两项。只得从系统环境变量中获取环境变量重新添加进新启动的进程中。同时必须明确的是进程的工作目录不等于进程的启动目录。比如
复制代码 代码如下:
ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "stop.bat");

如果去掉AppDomain.CurrentDomain.BaseDirectory将报无法找到stop.bat 的错误,就是因为工作目录和启动目录不一致导致。
[!--infotagslink--]

相关文章

  • Tomcat配置及如何在Eclipse中启动

    这篇文章主要介绍了Tomcat配置及如何在Eclipse中启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-04
  • Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

    这篇文章主要介绍了Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-10
  • 详解Tomcat常用的过滤器

    过滤器Filter是定义于tomcat的servlet-api.jar中的一个接口,接口路径为javax.servlet.Filter。tomcat过滤器采用了典型的过滤器设计模式,过滤器链FilterChain由tomcat维持,链条是可以支持多个过滤器的...2021-06-26
  • tomcat启动完成执行 某个方法 定时任务(Spring)操作

    这篇文章主要介绍了tomcat启动完成执行 某个方法 定时任务(Spring)操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-25
  • Tomcat正常访问localhost报404问题解决

    这篇文章主要介绍了Tomcat正常访问localhost报404问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • 使用Maven 搭建 Spring MVC 本地部署Tomcat的详细教程

    这篇文章主要介绍了使用Maven 搭建 Spring MVC 本地部署Tomcat,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-16
  • Tomcat首次部署web项目流程图解

    这篇文章主要介绍了Tomcat首次部署web项目流程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-11
  • idea2020.3配置maven环境并配置Tomcat的详细教程

    这篇文章主要介绍了idea2020.3配置maven环境并配置Tomcat的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-19
  • Tomcat中catalina.bat设置为UTF-8控制台出现乱码

    这篇文章主要介绍了Tomcat中catalina.bat设置为UTF-8控制台出现乱码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • Tomcat将配置文件放在外部的解决方法

    这篇文章主要给大家介绍了关于Tomcat将配置文件放在外部的相关资料,对平时工作来说还是挺实用的,需要的朋友们下面随着小编一起来看看吧...2021-05-16
  • 如何将tomcat源码以maven方式运行

    这篇文章主要介绍了如何将tomcat源码以maven方式运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • Oracle利用errorstack追踪tomcat报错ORA-00903 无效表名的问题

    这篇文章主要介绍了Oracle利用errorstack追踪tomcat报错ORA-00903 无效表名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • 一次tomcat源码启动控制台中文乱码的调试过程记录

    平时在使用tomcat做一些服务的时候经常遇到各种乱码问题,下面这篇文章主要给大家介绍了一次tomcat源码启动控制台中文乱码的调试过程,需要的朋友可以参考下...2021-06-01
  • Tomcat源码解析之Web请求与处理

    这篇文章主要介绍了Tomcat源码解析之Web请求与处理,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下...2021-05-08
  • IDEA 2020 配置Tomcat服务器的详细步骤

    这篇文章主要介绍了IDEA 2020 配置Tomcat服务器的详细教程,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-05
  • SpringBoot内置tomcat启动原理详解

    这篇文章主要介绍了SpringBoot内置tomcat启动原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-30
  • 为什么我的tomcat启动不起来

    tomcat安装好了,准备部署Web项目了,启动tomcat,发现没有反应,本文就来解决一下这个问题,感兴趣的小伙伴们可以参考一下...2021-07-08
  • zabbix监控Nginx/Tomcat/MySQL的详细教程

    这篇文章主要介绍了zabbix监控Nginx/Tomcat/MySQL的详细教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • Asp.net控制Tomcat启动关闭的实现方法

    近日有个项目客户要求能自己配置相关权限。由于历史原因这个项目采用的是公司以前的权限系统...2021-09-22
  • 解决Spring boot 嵌入的tomcat不启动问题

    这篇文章主要介绍了解决Spring boot 嵌入的tomcat不启动问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-11