要求做一个WEB端的服务器实时流量利用率监控曲线!
具体做法是后台采用SNMP4J采集服务器流量,前台采用DWR调用后台Bean得到数据,然后利用VML显示曲线。
1、DWR配置,先把DWR.jar加入到WEB-INF/lib下。
在web.xml下加入如下片段:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
2、加入SNMP4J.JAR包,将SNMP4J.JAR加入到WEB-INF/lib下,写好流量采集代码,如下:
1 package com.wingo.util;
2
3
4 import org.snmp4j.CommunityTarget;
5 import org.snmp4j.PDU;
6 import org.snmp4j.Snmp;
7 import org.snmp4j.TransportMapping;
8 import org.snmp4j.event.ResponseEvent;
9 import org.snmp4j.smi.Address;
10 import org.snmp4j.smi.GenericAddress;
11 import org.snmp4j.smi.OID;
12 import org.snmp4j.smi.OctetString;
13 import org.snmp4j.smi.VariableBinding;
14 import org.snmp4j.transport.DefaultUdpTransportMapping;
15
16 /**
17 * snmp代理工具类
18
19 *
20 * <pre>
21 * ***************************************************************
22 * Copyright. Wingo 2006 ALL RIGHTS RESERVED.
23 *
24 * This software is only to be used for the purpose for which it
25 * has been provided. No part of it is to be reproduced,
26 * disassembled, transmitted, stored in a retrieval system or
27 * translated in any human or computer language in any way or
28 * for any other purposes whatsoever without the prior written
29 * consent of Wingo.
30 * ***************************************************************
31 *
32 * Class Name: SnmpUtil.java
33 * Creation Date: 2007-8-6
34 * Description:
35 *
36 * Amendment Date CMM/PPCRNo. Programmer Description
37 * 2007-8-6 Administartor create
38 * </pre>
39 *
40 * @author Administartor
41 * @version 1.0
42 */
43 public class SnmpUtil {
44
45 public static final int version1 = 0;
46
47 public static final int version2c = 1;
48
49 public static final int version3 = 3;
50
51 private static TransportMapping transport = null;
52 private static Snmp protocol = null;
53 /**
54 * 创建snmp连接
55 */
56
57 public static Snmp createSnmp() {
58 try {
59 // 设定采取的协议
60 TransportMapping transport = new DefaultUdpTransportMapping();
61 if (false && transport == null || protocol == null) {
62 transport = new DefaultUdpTransportMapping();
63 protocol = new Snmp(transport);
64 transport.listen();
65 }
66 return protocol;
67 }
68 catch (Exception ex) {
69 ex.printStackTrace();
70 }
71 return null;
72 }
73
74 /**
75 * 连接目标机器
76 * url格式:udp:192.168.1.168/161 community:默认是public
77 */
78 public static CommunityTarget createTarget(String url, String community, int version) {
79 // 设定CommunityTarget
80 CommunityTarget myTarget = new CommunityTarget();
81 Address deviceAdd = GenericAddress.parse(url);
82 myTarget.setAddress(deviceAdd);
83 myTarget.setCommunity(new OctetString(community));
84 myTarget.setRetries(2);
85 myTarget.setTimeout(5 * 60);
86 myTarget.setVersion(version);// org.snmp4j.mp.*;
87 return myTarget;
88 }
89
90 /**
91 * 获取当前OID的值,如果不存在返回null
92 * url 格式为udp:192.168.1.168/161
93 */
94 public static PDU get(String url, String community, int version, String oid) {
95 return get(url,community,version2c, oid, PDU.GET);
96 }
97
98 /**
99 * 获取当前OID的下一个节点的值
100 * 格式为udp:192.168.1.168/161
101 */
102 public static PDU getNext(String url, String community, int version, String oid) {
103 return get(url,community,version2c, oid, PDU.GETNEXT);
104 }
105
106 /**
107 * 得到一个PDU类
108 */
109 private static PDU get(String url, String community, int version, String oid,int type) {
110 try {
111 Snmp protocol = createSnmp();
112 CommunityTarget target = createTarget(url, community, version);
113 VariableBinding var = new VariableBinding(new OID(oid));
114
115 PDU request = new PDU();
116 request.add(var);
117 request.setType(type); //PDU.GETNEXT
118 ResponseEvent responseEvent = protocol.send(request, target);
119
120 return responseEvent.getResponse();
121 } catch (Exception ex) {
122 ex.printStackTrace();
123 }
124 return null;
125 }
126
127 /**
128 * 获得具体的值,在此为了测试,采用随机数
129 * @return
130 */
131 public double getValue(){
132 double value = 0 ;
133 String url = "udp:192.168.1.38/161";
134 String community = "public";
135 int version = SnmpUtil.version2c;
136 PDU response = SnmpUtil.get(url, community, version, "1.3.6.1.2.1.2.2.1.10",PDU.GETNEXT);
137 for (int i = 0; response != null && i < response.size(); i++) {
138 value = response.get(0).getVariable().toLong();//取得当前的值
139 }
140 //下面一行代码为方便测试采用产生随机数,由于在页面上是利用率,所以前面取得当前值的时候要把它计算成当前利用率
141 value = Math.random()*100 ;
142 return value;
143 }
144
145 public static void main(String[] str) {
146 String url = "udp:192.168.1.38/161";
147 String community = "public";
148 int version = SnmpUtil.version2c;
149
150 try {
151 PDU response = SnmpUtil.get(url, community, version, "1.3.6.1.2.1.2.2.1.10",PDU.GETNEXT);
152 for (int i = 0; response != null && i < response.size(); i++) {
153 System.out.println("***** " + response.get(0).getVariable());
154 }
155 } catch (Exception ex) {
156 ex.printStackTrace();
157 }
158
159 }
160
161 }
162
3、配置DWR函数调用:
在WEB-INF文件夹下创建dwr.xml文件,具体代码如下:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="SnmpUtil">
<param name="class" value="com.wingo.util.SnmpUtil" />
</create>
</allow>
</dwr>
4、页面调用:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <html xmlns:v="urn:schemas-microsoft-com:vml">
3 <head>
4 <title>动态创建VML</title>
5 </head>
6 <STYLE>
7 v\:* { BEHAVIOR: url(#default#VML) }
8 </STYLE>
9 <script language="JavaScript">
10 var art = new Array(21);//定义数据存储数组
11 var str = ''; // 线的数据组合
12 for(i=0;i<=20;i++){ //初始化一条直线,在坐标的底部
13 art[i] = i * 10 + ",200 ";
14 str = str + art[i];
15 }
16
17 //绘制一条性能曲线。
18 function createLine(str){
19 if(document.getElementById("temp")){
20 var temp = document.getElementById("temp");
21 temp.removeNode(true);//把原来的线,删除。
22 }
23
24 var strElement='<v:PolyLine id="temp" filled="false" Points="'+ str +'" style="position:relative"/>';
25
26 var newPoint = document.createElement(strElement);
27 group1.insertBefore(newPoint);//创建一条新的线。
28 }
29 //把新取到的参数,放到数组的尾部,并位移最早的坐标值。
30 function newLine(tem){
31 str = '';
32 for(i=1;i<=20;i++){
33 var t1 = art[i].split(',');
34 t1[0]= t1[0] - 10;
35 art[i-1] = t1[0] + ',' + t1[1];
36 str = str + art[i-1];
37 }
38 art[20] = "200," + tem + ' ';
39 str = str + art[20];
40 }
41 </script>
42 <script type='text/javascript' src='dwr/interface/SnmpUtil.js'></script>
43 <script type='text/javascript' src='dwr/engine.js'></script>
44 <script type='text/javascript' src='dwr/util.js'></script>
45
46 <body>
47 <br>
48 <br>
49 <!-- 坐标绘制 -->
50 <v:group ID="group1" style="WIDTH:500px;HEIGHT:200px"
51 coordsize="200,200">
52 <%for(int i=0;i<=20;i++){ %>
53 < </di
分享到:
相关推荐
DWR+Struts+spring+hibernate的订货系统,自己添加的dwr功能
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...
总结起来,"DWR+extjs+spring+hibernate"的组合是现代Web应用开发的一个强大工具集,它能够帮助开发者快速构建出交互性强、性能优异的企业级应用。通过深入理解和熟练掌握这四个技术,可以显著提升开发者的技能水平...
Spring+DWR+ibatis+jQuery+easyUI的框架例子. 完全开放源代码,免费学习与使用。 可以完成基本的后台主界面,报表查询,数据查询,增加,修改等功能。 如果你要做一些报表,后台功能利用这个a框架就可以很方便实现。
《DWR+Spring+Hibernate整合应用详解》 在IT领域,DWR(Direct Web Remoting)、Spring和Hibernate是三个至关重要的技术组件,它们分别在Web应用程序的远程调用、依赖注入和对象关系映射方面发挥着核心作用。将这三...
总结,Spring+Dwr+Hibernate的整合项目提供了一种高效的方式,用于开发具备实时交互特性的Web应用。通过Spring的管理能力、Hibernate的ORM功能以及DWR的双向通信支持,开发者可以构建出高性能、易于维护的企业级应用...
### dwr+hibernate实现的分页技术详解 在当今快速发展的互联网环境中,网站和应用程序需要处理大量的数据。为了提高用户体验并优化服务器资源利用,分页技术成为了必不可少的一部分。本文将详细介绍如何通过结合dwr...
### DWR+jquery2.x+easyUI1.3.x开发富客户端应用 #### 知识点一:技术栈概述 本篇文章将介绍一种基于DWR、jquery2.x以及easyUI1.3.x的技术栈来构建富客户端应用的方法。该技术栈还包括了Struts2.x、Spring3.x等...
SSH+Dwr+Ajax框架是构建现代Web应用的一种高效组合,尤其在OA(Office Automation)办公自动化系统中,它们能够实现高效的数据交互和用户界面的动态更新。下面将详细讲解这三个关键技术及其在OA系统中的应用。 **...
【标题】"源码分享-ibatis+dwr+jQuery"是一个关于使用这三种技术构建的简单商城系统的源码集合。Ibatis、Direct Web Remoting (DWR) 和 jQuery 是Web开发中的关键组件,它们共同作用于提升应用程序的性能和用户体验...
**DWR(Direct Web Remoting)与Spring框架的集成配置** DWR(Direct Web Remoting)是一个开源的Java库,允许在Web应用程序中实现Ajax功能,使得JavaScript可以直接调用服务器端的Java方法,实现了浏览器与服务器...
【标题】"Web开发实例(DWR+Struts2)"揭示了一个综合性的Web应用程序开发案例,其中结合了Direct Web Remoting (DWR) 和Struts2框架。DWR是一种JavaScript库,它允许在浏览器和服务器之间进行实时、异步的通信,从而...
在这个"Dwr+Spring"的小例子中,我们可以预期包含以下关键知识点: 1. **DWR配置**:在项目中,你需要配置DWR的`dwr.xml`文件,这个文件定义了哪些Java对象(或bean)可以被JavaScript访问,以及这些方法的映射。...
ajax,spring,hibernate,dwr,实现二级联动
内含 ext+dwr+freemark+jasperreort+ireport+echance+oscache+velocite等技术 展示例子:http://zz563143188.iteye.com/blog/1462413 若要下载chm格式请到http://user.qzone.qq.com/563143188 程序源码下载地址10MB...
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...
导入myeclips就可用,智能搜索功能:让用户体验感觉良好点,在输入相关的关键搜索字时就可以得知相应的记录数 Dwr+AutoComplete+pinyin4j 自动匹配(中文,拼音)
标题 "dwr+maven+jetty" 涉及到三个关键的开源技术:Direct Web Remoting (DWR),Maven,以及Jetty。这些工具在IT行业中常用于构建和部署Java Web应用程序。 1. Direct Web Remoting (DWR): DWR是一种JavaScript...
在这个"DWR+SPRING 例子"中,我们可以学习到如何将DWR与Spring框架整合,利用DWR的强大功能增强Spring应用的前端交互性。DWR与Spring的结合使得业务逻辑可以在服务器端处理,而用户界面的更新则由DWR直接处理,避免...
【标题】"MyBatis升级版Dwr+Spring"揭示了一个关于将MyBatis与Dwr(Direct Web Remoting)和Spring框架进行整合的主题。在Web应用开发中,这种集成可以提升应用程序的交互性和实时性,同时利用MyBatis的强大数据持久...