• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Asp.net控制Tomcat启动关闭的实现方法
    一、场景
    近日有个项目客户要求能自己配置相关权限。由于历史原因这个项目采用的是公司以前的权限系统。这个权限系统很强大,不过有个弊端,就是每增加一个权限菜单都要重启才能生效,不然就要等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 的错误,就是因为工作目录和启动目录不一致导致。
    您可能感兴趣的文章:
    • 解决Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题
    • Java开启/关闭tomcat服务器的方法
    • java代码关闭tomcat程序及出现问题解析
    • 一次tomcat自动关闭的bug解决
    上一篇:a.sp.net清除ListBox的列表项(删除所有项目)
    下一篇:ASP.NET对无序列表批量操作的三种方法小结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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