- 浏览: 386248 次
文章分类
- 全部博客 (176)
- linux (37)
- apache (5)
- subversion (2)
- mysql (11)
- 营销 (1)
- maven (3)
- tomcat (12)
- 虚拟化 (3)
- oracle (10)
- JIRA (3)
- 系统架构 (4)
- linux 命令 (6)
- 网络 (4)
- spring (2)
- email (3)
- jsp (0)
- 数据库 (6)
- 分布式缓存 (3)
- cobar (1)
- FTP (2)
- redis (6)
- HA (3)
- JAVA (6)
- solr (7)
- javascript (1)
- hadoop (2)
- mybatis (1)
- 安全 (2)
- nginx (11)
- play (0)
- 负载均衡 (1)
- 多线程 (1)
- 算法 (1)
- iptables&route (3)
- eclipse (1)
- ibatis (1)
- mongoDB (1)
- CDN (1)
- docker (7)
- web应用 (1)
- openVPN (2)
最新评论
-
Aceslup:
非常感谢你提供的jars。
在Apache Tomcat 7设置redis作为session store -
Aceslup:
tomcat启动是没报错,不过,session无法保存到red ...
在Apache Tomcat 7设置redis作为session store -
pyzheng:
我也是这样配置了, 但是配置 <Valve class ...
在Apache Tomcat 7设置redis作为session store -
shiguanghui:
我检测到这个redis访问不正常。我肯定会停掉keepaliv ...
Redis双机热备(keepalived实现) -
ctfyforever:
非常感谢你的贡献,但是我发现个错误chk_redis.sh 脚 ...
Redis双机热备(keepalived实现)
第一种方式:监控请求
原理很简单。 在机器上做一个测试的文件。如果我们的程序能够读取到这个文件,则证明运行正常,可简单实现Tomcat HA.
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
public class Detector {
private static void keepTomcatAlive() throws NullPointerException {
String s;
String t = new String("tomcat5.exe");
boolean isTomcatAlive = false;
java.io.BufferedReader in;
try {
URL url = new URL("http://localhost/heartbeat.htm");
URLConnection con = url.openConnection();
in = new java.io.BufferedReader(new java.io.InputStreamReader(con
.getInputStream()));
con.setConnectTimeout(1000);
con.setReadTimeout(4000);
while ((s = in.readLine()) != null) {
if (s.length() > 0) {
// 如果能够读取到页面则证明可用
return;
}
}
in.close();
} catch (Exception ex) {
}
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec(
"tasklist");
in = new java.io.BufferedReader(new java.io.InputStreamReader(p
.getInputStream()));
while ((s = in.readLine()) != null) {
if (s.startsWith(t)) {
isTomcatAlive = true;
break;
}
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
if (isTomcatAlive) {
System.out.println("<" + new Date()
+ "> Tomcat is alive but not response!");
stopTomcat();
}
startTomcat();
}
public static void stopTomcat() {
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec(
"net stop /"Apache Tomcat/"");
java.io.BufferedReader in = new java.io.BufferedReader(
new java.io.InputStreamReader(p.getInputStream()));
String s;
String t = "成功停止";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
System.out.println("<" + new Date() + "> Tomcat is stop "
+ (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void startTomcat() {
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec(
"net stop /"Apache Tomcat/"");
} catch (Exception e) {
e.printStackTrace();
}
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec(
"net start /"Apache Tomcat/"");
java.io.BufferedReader in = new java.io.BufferedReader(
new java.io.InputStreamReader(p.getInputStream()));
String s;
String t = "启动成功";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
System.out.println("<" + new Date() + "> Tomcat is start "
+ (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
while (true) {
try {
Detector.keepTomcatAlive();
Thread.sleep(30000);
} catch (Exception ex) {
}
}
}
}
第二种方式:监控日志
由于tomcat部署的应用,在客户使用的过程中,每过五六天总会吊死成僵尸进程,查看日志为无效的变元,搜遍网络,尝试了很多办法也没有解决此问题。同时不能更换web容器,因为会增加成本,只好用java写了个监控程序,目前正在测试中
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import java.util.TimeZone;
/**
* NAME : tomcat.java
* FUNCTION : 监控服务器tomcat状态
* PROGRAMMED : TELSTAR/jlsu
* DATE(ORG) : 20090109
* PROJECT : TELSTAR
* OS : HP-UNIX
* HISTORY :
*/
public class TomcatDetector {
private long sJKdate;
public TomcatDetector() {
Date now = new Date();
sJKdate = now.getTime();
}
private static final Logger logger = Logger.getLogger(TomcatDetector.class);
private static void keepTomcatAlive() throws NullPointerException {
String s;
boolean isTomcatAlive = false;
java.io.BufferedReader in;
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
try {
URL url = new URL("http://133.128.4.7:8080/index.jsp");
URLConnection con = url.openConnection();
in = new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream()));
con.setConnectTimeout(1000);
con.setReadTimeout(4000);
while ((s = in.readLine()) != null) {
if (s.length() > 0) {
// 如果in.readLine的内容不为空,则证明当前的tomcat容器可用,不过操作直接返回
return;
}
}
in.close();
} catch (Exception ex) {
}
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec("ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'");
in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
while ((s = in.readLine()) != null) {
isTomcatAlive = true;
break;
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
if (isTomcatAlive) {
logger.debug(sSel_date + "> Tomcat is alive but not response!");
stopTomcat();
}
startTomcat();
}
public static void stopTomcat() {
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
try {
logger.debug("------------------开始杀死僵尸tomcat---------------------");
java.lang.Process p = java.lang.Runtime.getRuntime().exec("kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`");
java.lang.Process p1 = java.lang.Runtime.getRuntime().exec("ps -ef |grep java | grep -v vi | grep -v tail | grep -v grep");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p1.getInputStream()));
String s;
String t = "Djava";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) == -1) {
restart = true;
break;
}
}
logger.debug( sSel_date + "> Tomcat is stop " + (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void startTomcat() {
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec("kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`");
} catch (Exception e) {
e.printStackTrace();
}
try {
logger.debug("------------------开始重启---------------------");
java.lang.Process p1 = java.lang.Runtime.getRuntime().exec("/telstar/tomcat/bin/./startup.sh &");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p1.getInputStream()));
String s;
String t = "tomcat";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
logger.debug( sSel_date + "> Tomcat is start " + (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
PropertyConfigurator.configure("/telstar/bin/tomcatJK/logtomcatJK.properties");
logger.debug("------------------开始监控---------------------");
while (true) {
try {
TomcatDetector.keepTomcatAlive();
logger.debug("------------------检测tomcat状态---------------------");
Thread.sleep(24000);
} catch (Exception ex) {
}
}
}
}
原理很简单。 在机器上做一个测试的文件。如果我们的程序能够读取到这个文件,则证明运行正常,可简单实现Tomcat HA.
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
public class Detector {
private static void keepTomcatAlive() throws NullPointerException {
String s;
String t = new String("tomcat5.exe");
boolean isTomcatAlive = false;
java.io.BufferedReader in;
try {
URL url = new URL("http://localhost/heartbeat.htm");
URLConnection con = url.openConnection();
in = new java.io.BufferedReader(new java.io.InputStreamReader(con
.getInputStream()));
con.setConnectTimeout(1000);
con.setReadTimeout(4000);
while ((s = in.readLine()) != null) {
if (s.length() > 0) {
// 如果能够读取到页面则证明可用
return;
}
}
in.close();
} catch (Exception ex) {
}
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec(
"tasklist");
in = new java.io.BufferedReader(new java.io.InputStreamReader(p
.getInputStream()));
while ((s = in.readLine()) != null) {
if (s.startsWith(t)) {
isTomcatAlive = true;
break;
}
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
if (isTomcatAlive) {
System.out.println("<" + new Date()
+ "> Tomcat is alive but not response!");
stopTomcat();
}
startTomcat();
}
public static void stopTomcat() {
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec(
"net stop /"Apache Tomcat/"");
java.io.BufferedReader in = new java.io.BufferedReader(
new java.io.InputStreamReader(p.getInputStream()));
String s;
String t = "成功停止";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
System.out.println("<" + new Date() + "> Tomcat is stop "
+ (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void startTomcat() {
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec(
"net stop /"Apache Tomcat/"");
} catch (Exception e) {
e.printStackTrace();
}
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec(
"net start /"Apache Tomcat/"");
java.io.BufferedReader in = new java.io.BufferedReader(
new java.io.InputStreamReader(p.getInputStream()));
String s;
String t = "启动成功";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
System.out.println("<" + new Date() + "> Tomcat is start "
+ (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
while (true) {
try {
Detector.keepTomcatAlive();
Thread.sleep(30000);
} catch (Exception ex) {
}
}
}
}
第二种方式:监控日志
由于tomcat部署的应用,在客户使用的过程中,每过五六天总会吊死成僵尸进程,查看日志为无效的变元,搜遍网络,尝试了很多办法也没有解决此问题。同时不能更换web容器,因为会增加成本,只好用java写了个监控程序,目前正在测试中
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import java.util.TimeZone;
/**
* NAME : tomcat.java
* FUNCTION : 监控服务器tomcat状态
* PROGRAMMED : TELSTAR/jlsu
* DATE(ORG) : 20090109
* PROJECT : TELSTAR
* OS : HP-UNIX
* HISTORY :
*/
public class TomcatDetector {
private long sJKdate;
public TomcatDetector() {
Date now = new Date();
sJKdate = now.getTime();
}
private static final Logger logger = Logger.getLogger(TomcatDetector.class);
private static void keepTomcatAlive() throws NullPointerException {
String s;
boolean isTomcatAlive = false;
java.io.BufferedReader in;
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
try {
URL url = new URL("http://133.128.4.7:8080/index.jsp");
URLConnection con = url.openConnection();
in = new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream()));
con.setConnectTimeout(1000);
con.setReadTimeout(4000);
while ((s = in.readLine()) != null) {
if (s.length() > 0) {
// 如果in.readLine的内容不为空,则证明当前的tomcat容器可用,不过操作直接返回
return;
}
}
in.close();
} catch (Exception ex) {
}
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec("ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'");
in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
while ((s = in.readLine()) != null) {
isTomcatAlive = true;
break;
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
if (isTomcatAlive) {
logger.debug(sSel_date + "> Tomcat is alive but not response!");
stopTomcat();
}
startTomcat();
}
public static void stopTomcat() {
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
try {
logger.debug("------------------开始杀死僵尸tomcat---------------------");
java.lang.Process p = java.lang.Runtime.getRuntime().exec("kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`");
java.lang.Process p1 = java.lang.Runtime.getRuntime().exec("ps -ef |grep java | grep -v vi | grep -v tail | grep -v grep");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p1.getInputStream()));
String s;
String t = "Djava";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) == -1) {
restart = true;
break;
}
}
logger.debug( sSel_date + "> Tomcat is stop " + (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void startTomcat() {
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec("kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`");
} catch (Exception e) {
e.printStackTrace();
}
try {
logger.debug("------------------开始重启---------------------");
java.lang.Process p1 = java.lang.Runtime.getRuntime().exec("/telstar/tomcat/bin/./startup.sh &");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p1.getInputStream()));
String s;
String t = "tomcat";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
logger.debug( sSel_date + "> Tomcat is start " + (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
PropertyConfigurator.configure("/telstar/bin/tomcatJK/logtomcatJK.properties");
logger.debug("------------------开始监控---------------------");
while (true) {
try {
TomcatDetector.keepTomcatAlive();
logger.debug("------------------检测tomcat状态---------------------");
Thread.sleep(24000);
} catch (Exception ex) {
}
}
}
}
发表评论
-
tomcat下禁用不安全的http方法
2015-07-15 16:11 4261WebDAV (Web-based Distributed ... -
Tomcat优化配置
2015-04-04 21:51 865一.Tomcat内存优化 ... -
Tomcat Xms Xmx PermSize MaxPermSize 区别 及 java.lang.OutOfMemoryError: PermGen sp
2015-01-16 11:55 1231Tomcat Xms Xmx PermSize MaxPer ... -
解决linux服务器Tomcat日志中文乱码问题
2014-07-15 11:42 2130首先需要确认服务器是否支持中文,在支持中文字符集的服务器,可 ... -
linux 设置 tomcat jvm内存
2014-06-18 10:52 1558常见的内存溢出有以下两种: java.lang.OutOf ... -
tomcat架构分析(valve机制)
2014-03-10 11:59 1151关于tomcat的内部逻辑单元的存储空间已经在相关容器类的b ... -
设置TOMCAT启用GZIP压缩
2013-09-23 18:31 1998原理简介 HTTP 压缩可以大大提高浏览网 ... -
linux 下tomcat开机自启动
2013-09-18 09:26 2359方法一: linux 下tomcat开机自启动修改T ... -
Tomcat集群和Session复制应用介绍
2013-08-30 14:07 2617看实例将远离。废话不多数,解之: 一个配置文件: ... -
linux下apache tomcat 通过mod_proxy负载均衡
2013-08-30 16:23 2374第一章. 背景简介 对于大多数企业应用,都希望能做到 ... -
maven构建项目自动部署到tomcat中遇到的各种sb问题总结
2013-07-04 17:10 1412maven构建项目自动部署到tomcat中遇到的各种sb问题总 ...
相关推荐
- **类结构**:程序主要由`CheckTomcat`类构成,其中包含了`checkTomcatIsAlive`方法用于检测Tomcat状态,以及`main`方法作为程序入口。 - **代码示例**: - **初始化配置**:在`main`方法中初始化`monitorurl`和`...
当检测到Tomcat服务假死或异常时,自动重启过程可以由同一脚本触发。在Windows环境下,可以使用Taskkill命令结束Tomcat进程,然后使用启动命令(如`startup.bat`)重新启动Tomcat。确保脚本具有适当的权限,以便能够...
总结来说,这个压缩包提供了一套针对Windows环境下的Tomcat服务监控和自动重启解决方案。通过"监控tomcat.bat"脚本结合"curl.exe"工具,可以实时检查Tomcat的运行状态,并在出现问题时自动恢复服务。"功能截图.png...
10秒检测tomcat网站是否访问正常,访问异常30秒内完成tomcat重启并继续监控,傻瓜式修改两个地方,第一个要监控的 url地址支持https,第二个是tomcat的安装目录,就可以了。好用记得给个大大的好评。bat文件每一行都...
为了保证服务的连续性和稳定性,我们需要编写一个批处理脚本来监控Tomcat的状态,并在检测到异常时自动重启Tomcat。 "listener.bat" 文件很可能是这个自动重启脚本的核心部分。批处理脚本通常由一系列命令组成,...
3. **使用Systemd服务**:在支持Systemd的Linux系统中,可以创建一个Tomcat服务单元文件,配置自动重启选项,如`Restart=always`。 4. **集成Zabbix或Nagios**:这些专业的监控系统不仅可以监控Tomcat,还可以在...
因此,配置一个自动检测并重启TOMCAT的机制是提高系统可靠性的重要步骤。 【描述】中提到的“利用系统进程进行监控”是指通过监测TOMCAT的服务进程来判断其运行状态。在Windows系统中,这通常涉及到使用任务管理器...
标题中的“tomcat服务进程守护”指的是在服务器环境中,对Tomcat应用服务器进行自动化管理,确保即使服务意外停止,也能自动重启,以维持系统的稳定运行。这种守护过程通常由一个额外的程序或脚本实现,它监控Tomcat...
### Linux下监控与自动重启Tomcat服务的知识点详解 #### 一、背景介绍 在Linux环境中,对于诸如Tomcat这样的应用服务器进行实时监控并具备自动重启功能是非常重要的。这不仅能够确保应用程序的高可用性,还能及时...
为了解决这个问题,我们可以编写一个监控并自动重启Tomcat的Shell脚本来确保服务的高可用性。以下将详细介绍如何创建这样的脚本。 首先,我们需要理解Linux Shell脚本的基本结构。Shell脚本是Linux操作系统中的一种...
【描述】中的脚本实现了一个自动重启功能,即当Tomcat在Windows环境下异常退出时,能够自动触发重启过程。这一功能对于提高系统的稳定性至关重要,因为它可以减少因服务器停机导致的业务中断时间。通常,这种自动化...
标题中的“自动启动Tomcat”指的是在服务器上配置Tomcat服务,使其能够在关闭后自动重新启动,以确保应用程序的连续性和稳定性。C#是.NET框架的一部分,通常用于编写Windows服务或者控制台应用来实现这样的自动化...
4. **检测Tomcat状态** - 类名:`Detector` - 方法名:`keepTomcatAlive` - 功能:检查Tomcat是否处于运行状态,如果未运行,则自动重启。 - 实现方法:尝试访问一个已知的URL(例如`http://www.mowker.com/`)...
在企业环境中,由于代码的复杂性和不可预知性,服务器崩溃或无响应是常见现象,而这个监控程序的自动重启功能,可以在检测到异常情况后迅速恢复服务,减少业务中断时间,从而提高系统的可用性。 【标签】"tomcat...
总的来说,通过合理配置IDEA的自动构建选项,以及Mybatis Plus的热加载设置,我们可以实现在修改Mapper XML文件后,无需重启Tomcat即可看到更新效果,大大提高开发效率。如果遇到XML文件未被自动检测到更新的情况,...
为了提高系统的可靠性和稳定性,开发了一个Java实现的监控程序,它的主要功能是监听服务程序的状态,如果检测到程序意外终止或挂掉,它会自动重启该程序,并且向开发人员发送短信通知,以便快速了解问题并采取相应的...
这个过程通常包括设置监控工具来检测Tomcat的状态,配置异常处理机制,以及设定自动重启规则。 【详细说明】: 1. **监控**:监控是Tomcat自恢复的基础。可以使用Zabbix、Nagios、Prometheus等监控工具来实时监测...
通过以上方法,我们可以构建一个简单的Tomcat监控和自动重启系统,提高服务的可用性和稳定性。在实际应用中,可以根据需要进行扩展,例如增加日志记录、邮件通知等功能,以提升系统的监控能力。
然而,当我们在MyEclipse中修改了类文件或JSP文件后,通常需要重启Tomcat服务器才能使更改生效,这无疑增加了开发过程中的等待时间。本文将详细介绍如何在MyEclipse中实现修改类及JSP文件后无需重启Tomcat即可实时...
修改应用后,无需重启服务器,Tomcat可以检测到变化并自动更新。 8. **安全性**:Tomcat提供多种安全机制,如角色授权、SSL加密、form-based认证等,确保Web应用的安全性。 9. **JMX管理**:通过Java Management ...