JAVA程序获取Tomcat的运行状态

用浏览器来查看Tomcat的运行状态:

配置Tomcat的管理用户和权限。

打开%Tomcat_Home%/conf/目录下的tomcat-user.xml文件,配置以下内容:

<role rolename="manager-status"/>
<role rolename="manager"/>  
<role rolename="manager-jmx"/> 
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="admin"/>

<user username="tomcat" password="tomcat" roles="tomcat"/> 

<user username="admin" password="tomcat" roles="manager,manager-gui,admin,manager-status,manager-jmx,manager-script"/>

此时可通过admin用户来访问tomcat的状态,在浏览器地址中输入:

http://localhost:8080/manager/status?XML=true

    输入用户名:admin,密码:tomcat. 出现以下页面,即Tomcat的运行状态。

或者可以直接访问:

http://admin:tomcat@localhost :8080/manager/status?XML=true

Java程序获取Tomcat运行状态:

根据上面的思路,可以通过URL来获取Tomcat  manager返回的信息,再解析这个信息就可以了,参考cacti的监控方式中,用perl编写的监控模板也是如此,如下:

 my $host = shift;
 my $username = shift;
 my $password = shift;
 my $connector = shift or &usage;
 my $url = "http://$username:$password"."\@$host/manager/status?XML=true";

 my $xml = `GET $url`;

 my $status = XMLin($xml);

因此Java也可参考此方法:

@Test
	public void test1() throws IOException {
		URL url = null;
		InputStream is = null;
		StringBuffer resultBuffer = new StringBuffer();
		BufferedReader breader = null;
		try {
			url = new URL(
					"http://admin:[email protected]:8080/manager/status?XML=true");
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			is = conn.getInputStream();

			breader = new BufferedReader(new InputStreamReader(is));
			String line = "";
			while ((line = breader.readLine()) != null) {
				resultBuffer.append(line);
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} finally {
			if (breader != null)
				breader.close();
			if (is != null)
				is.close();
		}
		System.out.println(resultBuffer.toString());
	}

运行时出现如下错误:

java.io.IOException: Server returned HTTP response code: 401 for URL: http://admin:[email protected]:8080/manager/status?XML=true
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1625)
	at com.merit.monitor.tomcat.TestTomcatStatus.test1(TestTomcatStatus.java:57)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

出错原因可以去stackoverview上查看,这里直接给出正确的解决方法:

1、编写获取Tomcat状态的字符串方法:

/**
	  * @Description: 获取指定URL的内容
	  * @Version1.0 2014-7-23 下午02:18:22 by xuqiang([email protected])创建
	  * @param tempurl url地址
	  * @param username tomcat 管理用户名
	  * @param password tomcat 管理用户密码
	  * @return
	  * @throws IOException
	  */
	public static String getHtmlContext(String tempurl, String username, String password) throws IOException {
		URL url = null;
		BufferedReader breader = null;
		InputStream is = null;
		StringBuffer resultBuffer = new StringBuffer();
		try {
			url = new URL(tempurl);
			String userPassword = username + ":" + password;
			String encoding = new sun.misc.BASE64Encoder().encode (userPassword.getBytes());//在classpath中添加rt.jar包,在%java_home%/jre/lib/rt.jar

			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestProperty("Authorization", "Basic " + encoding);
			is = conn.getInputStream();
			breader = new BufferedReader(new InputStreamReader(is));
			String line = "";
			while ((line = breader.readLine()) != null) {
				resultBuffer.append(line);
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} finally {
			if(breader != null)
				breader.close();
			if(is != null)
				is.close();
		}
		return resultBuffer.toString();
	}

2、编写测试方法:

@Test
	public void test() {
		String result = "";
		Document document = null;//引入org.dom4j包
		try {
			result = GetHtmlContext.getHtmlContext("http://localhost:8080/manager/status?XML=true", "admin", "tomcat");
			document = DocumentHelper.parseText(result);//将字符串转化为XML的Document
		} catch (IOException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		System.out.println(document.asXML());
	}

运行junit,正常打印监控状态的XML格式内容。这样就可以解析XML Dom的值获取Tomcat的运行状态。

JAVA程序获取Tomcat的运行状态

时间: 2024-11-04 07:59:55

JAVA程序获取Tomcat的运行状态的相关文章

java程序获取键盘输入(转载)

Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,我们来看以下三种解决方法: 方法一:从控制台接收一个字符,然后将其打印出来 代码示例: 1 //System.in.read()方法,只能接收单个字符 2 private static void inputMethod1() throws IOException { 3

Java程序读取tomcat下的properties配置文件

代码如下: //找到tomcat/etc/wx文件夹 private static String getPropFolderPath() { /* Properties p = System.getProperties(); p.list(System.out);*/ //获取tomcat的路径 String path = System.getProperty("catalina.home"); if (StringUtils.isEmpty(path)) { path = Query

linux系统部署Java程序获取ip时报Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known

问题一: Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known vi /etc/hosts 127.0.0.1 iZuf68tztea6l5ccdz7wemZ XXXXXXXXXX自己的主机名

stanford nlp 3.8.0 parse中通过java程序获取root节点

Collection<TypedDependency> tdl = gs.allTypedDependencies(); // TreeGraphNode tsn = gs.root(); for(TypedDependency i: tdl){//reln表示节点的关系,dep表示依赖指向的节点 if(i.reln() == GrammaticalRelation.ROOT){ LOG.info("输出root: " + i.dep().toString()); ; }

SQL函数TIMEDIFF在Java程序中使用报错的问题分析

需求背景 (读者可略过)司机每天从早到晚都会去到不同的自动售货机上补货,而且补货次数和路线等也是因人而异,补货依据是由系统优化并指派.但是目前系统还无法实施有效指挥和优良的补货策略,司机的补货活动因此变得较为随意和散漫.为了有效跟踪司机补货,计算司机补货效率,也为了便于HR月底计算司机绩效,因此提出需求需要根据司机补货记录数据阶段性地计算出补货情况统计值. 需求中指出,按天按司机手机号为统计维度,需要统计司机当天总共补货的机器数(相同机器补多次也只能算一台机器):统计司机当天总共补货的次数(自然

如何使用JVisualVM远程监控和优化Tomcat和Java程序的内存和CPU

如何使用VisualVM远程监控和优化Tomcat和Java程序的内存和CPU JVisualVM 是Java 继 JConsole 之后有一款力作,是集成了诸多分析和优化Java程序的工具的工具. 我们可以用它来为优化Java程序的内存占用,找出内存泄漏,分析Java程序的CPU占用情况,根据JVisualVM获取到的数据优化JVM配置等.   总之是相当好了~~~~ JVisualVM 位于JAVA_HOME/bin目录下 . 直接运行可打开. 打开后界面如下: 由于JVisualVM 本身

JTI + JNI,为Java程序提供获取JVM内部信息的通道

首先,JTI是啥? HotSpot JVM是使用C++写的,在操作系统层面来看,java.exe进程与其他进程并无特别之处.任何一个进程都可以加载第三方的DLL,JTI就是java.exe开放出来的向Java.exe进程注入dll的接口.也就是说,开发者根据JTI定义好的规范,用C++写一个dll,这个dll就可以被java.exe进程加载了[启动jvm的时候要加上-agentlib参数]. JTI的详细资料参见以下网址:http://docs.oracle.com/javase/7/docs/

普通java类在Tomcat启动时获取ServletContext

1.web.xml配置文件 <context-param> <param-name>messagePrefix</param-name> <param-value>需要在tomcat启动时获取的字符串</param-value> </context-param> 2.普通java类 1 import org.springframework.web.context.ContextLoader; 2 import org.springfr

如何通过抓包工具fiddler获取java程序的http请求

原文:如何通过抓包工具fiddler获取java程序的http请求 源代码下载地址:http://www.zuidaima.com/share/1550463683824640.htm 抓包工具fidder是一个很轻巧的可以获取浏览器,程序的http,https请求的软件. 百科地址:http://baike.baidu.com/view/868685.htm 官网地址:http://fiddler2.com/ firefox的fidder插件 而java程序需要设置proxy才能生效: Pro