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 的错误,就是因为工作目录和启动目录不一致导致。
Asp.net控制Tomcat启动关闭的实现方法的更多相关文章
- Tomcat启动失败的解决方法
在使用Tomcat的时候,经常会遇到启动失败的问题:解决方法:1.检查环境变量的配置,jdk的配置2.检查端口是否被占用. 关于环境变量的配置很容易搜到,如果按照网上的教程配置好了,但是还是启动失败的 ...
- 关于form表单提交到Servlet的时候出现tomcat启动错误的解决方法
1.遇到的问题 今天在写jsp代码的时候通过form表单提交到Servlet的时候出现的tomcat启动错误,琢磨了半天,终于找到了解决方法. 解决问题的关键就在于xml配置的路径和servlet中默 ...
- tomcat 启动 关闭 重启脚本
启动 #!/bin/bash # Author:wanglan # Mail:@qq.com # Fuction:Tomcat Start/stop/restart script # Version: ...
- Linux下Tomcat启动关闭命令
1.首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 2.查看Tomcat是否以关闭 ps -ef|grep tomcat 如果显示以下信息,说明Tomcat还没 ...
- Tomcat启动中文乱码解决方法
一:解决方法一: 1.查看电脑系统的编码 针对Windows平台下,点击运行--输入cmd,enter键进入命令窗口,输入:chcp可以得到操作系统的代码页信息(代码页:字符集编码的别名),可以从控制 ...
- tomcat 启动闪退解决方法
当我们在windows上面进行项目的部署与启动的时候有的时候tomcat在进行启动的时候会删一下就退了,这个时候一般是里面启动的时候设置的jdk的问题下面咱们来看一下具体解决方案 编辑我们的start ...
- Tomcat启动就执行特定方法
import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContex ...
- tomcat启动完成执行 某个方法 定时任务(Spring)
第一步引入接口: ServletContextListener @RestController @RequestMapping("/schedule") public class ...
- CentOS7.4 系统下 Tomcat 启动慢解决方法
CentOS7.4 系统下 Tomcat 启动慢解决的方法 首先查看日志信息,查看因为什么而启动慢 在CentOS7启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是s ...
随机推荐
- VS报表图解《一》---菜鸟版
与原先的开发环境VB.EXE不同VS2013自带了报表控件ReportViewer能够内部实现报表的设计,本文主要通过绑定数据集来实现报表的显示 1.加入:reportviewer控件,当将控件显示在 ...
- Codeforces Round #177 (Div. 2) 题解
[前言]咦?如今怎么流行打CF了?于是当一帮大爷在执着的打div 1的时候,我偷偷的在刷div 2.至于怎么决定场次嘛.一般我报一个数字A,随便再拉一个人选一个数字B.然后開始做第A^B场.假设认为机 ...
- java 学习总结
1 cobertura-maven-plugin maven的测试覆盖率插件集成cobertura-maven-plugin2 intelli J 配置VM参数 3 配置显示行号 mvn clean ...
- OJ刷题---简单password破解
题目要求: 输入代码: #include<iostream> #include <cstdio> #include <cstring> using namespac ...
- 【Datastage】在win10安装Datastge 8.7
在win10安装提示Datastage提示如下错误: 强制安装: setup.exe -force 进入浏览器安装界面后 忽略"失败"即可成功安装.
- Hacker - 世界上第一个黑客
http://juliet.iteye.com/blog/176525凯文·米特尼克,1964年生于美国加州的洛杉矶. 13岁时他对电脑着了迷,掌握了丰富的计算机知识和高超的操作技能,但却因为用学校的 ...
- struct2常用标签
Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了 ...
- NoSQL(二)
redis介绍 1.aof存储的文件会越来越大,当文件很大时我们可以进行一次rdb存储原来的aof文件就可以删除了,因为aof就相当与mysql中的binlog文件会一致增长,当redis里面的key ...
- C++程序设计项目开发——银行自己主动提款机(二)
函数的有关知识在后面章节会讲到,先提前了解下.在没有系统的学习完之前,咱们先来模仿着写一个样例,尝试这样的有效的学习方法. 尝试下这种学习方法. 显示功能选项 1.查询 2.取款 3.存款 4.转 ...
- windows server 2003中端口默认不能使用问题
问题:在windows server 2003中IIS6.0新建站点,给了一个新端口(非80),然后配置好后不能访问 解决方案:系统内置防火墙需要添加对应端口,如下图: 即解决.