<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    show-sales.com

    awed

     

    DWR+VML實時曲線

    最近公司要求做一個WEB端的服務(wù)器實時流量利用率監(jiān)控曲線!
    具體做法是后臺采用SNMP4J采集服務(wù)器流量,前臺采用DWR調(diào)用后臺Bean得到數(shù)據(jù),然后利用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      * 創(chuàng)建snmp連接
     55      */
     56    
     57     public static Snmp createSnmp() {
     58         try {
     59             // 設(shè)定采取的協(xié)議
     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      * 連接目標(biāo)機(jī)器
     76      * url格式:udp:192.168.1.168/161 community:默認(rèn)是public   
     77      */
     78     public static CommunityTarget createTarget(String url, String community, int version) {
     79         // 設(shè)定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      * 獲取當(dāng)前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      * 獲取當(dāng)前OID的下一個節(jié)點的值
    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      * 獲得具體的值,在此為了測試,采用隨機(jī)數(shù)
    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();//取得當(dāng)前的值
    139         }
    140         //下面一行代碼為方便測試采用產(chǎn)生隨機(jī)數(shù),由于在頁面上是利用率,所以前面取得當(dāng)前值的時候要把它計算成當(dāng)前利用率
    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函數(shù)調(diào)用:
        在WEB-INF文件夾下創(chuàng)建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、頁面調(diào)用:
     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <html xmlns:v="urn:schemas-microsoft-com:vml">
     3     <head>
     4         <title>動態(tài)創(chuàng)建VML</title>
     5     </head>
     6     <STYLE>
     7  v\:* { BEHAVIOR: url(#default#VML) }
     8 </STYLE>
     9 <script language="JavaScript">
    10 var art = new Array(21);//定義數(shù)據(jù)存儲數(shù)組
    11 var str = '';    // 線的數(shù)據(jù)組合
    12 for(i=0;i<=20;i++){    //初始化一條直線,在坐標(biāo)的底部
    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);//創(chuàng)建一條新的線。
    28 }
    29 //把新取到的參數(shù),放到數(shù)組的尾部,并位移最早的坐標(biāo)值。
    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         <!--  坐標(biāo)繪制  -->
    50         <v:group ID="group1" style="WIDTH:500px;HEIGHT:200px"
    51             coordsize="200,200">
    52             <%for(int i=0;i<=20;i++){ %>
    53                 <v:PolyLine filled="false" Points="<%=i*10%>,0 <%=i*10%>,200" style="position:relative" StrokeColor="red" />
    54             <%%>
    55             <%for(int i=0;i<=20;i++){ %>
    56                 <v:PolyLine filled="false" Points="0,<%=i*10%>,200,<%=i*10%>" style="position:relative" StrokeColor="red" />
    57             <%%>
    58         </v:group>
    59         <script>
    60 
    61 function ccc(msg){
    62     //alert(msg);
    63     newLine(msg);
    64     createLine(str);
    65 }
    66 </script>
    67 <script type="text/javascript">
    68 
    69 function getNum(){
    70     SnmpUtil.getValue(callback);
    71 }
    72 
    73 function callback(msg) {
    74     ccc(msg);
    75 }
    76 
    77 function clock(){
    78         setInterval("getNum()",1000);
    79 }
    80 clock();
    81 </script>
    82     </body>
    83 </html>
    84 
    85 
    86 

    posted on 2008-04-22 16:18 一鳴 閱讀(2072) 評論(0)  編輯  收藏 所屬分類: J2EE


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
    相關(guān)文章:
     

    導(dǎo)航

    統(tǒng)計

    公告


    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99在线精品免费视频九九视| 亚洲国产精品成人AV在线| 亚洲中文字幕无码一区 | 免费福利在线观看| 直接进入免费看黄的网站| 狠狠综合亚洲综合亚洲色| 美女被爆羞羞网站免费| 猫咪免费人成在线网站| 成年网在线观看免费观看网址| 日韩免费码中文在线观看| eeuss影院ss奇兵免费com| 好男人资源在线WWW免费| 91国内免费在线视频| 日本免费中文视频| 16女性下面无遮挡免费| 免费下载成人电影| 免费无码AV电影在线观看| 在人线av无码免费高潮喷水| 操美女视频免费网站| 免费国产不卡午夜福在线 | 最近中文字幕2019高清免费| 美女内射毛片在线看免费人动物| 免费人成在线观看69式小视频| 国产成人精品免费视频动漫| 毛片免费视频观看| 免费v片在线观看| 亚洲热线99精品视频| 亚洲黄色片免费看| 中文字幕在线观看亚洲视频| 青青青亚洲精品国产| 三级毛片在线免费观看| 亚洲网站在线免费观看| 日韩高清在线高清免费| 亚洲午夜日韩高清一区| 久久亚洲AV成人无码软件| 亚洲性无码AV中文字幕| 又黄又大的激情视频在线观看免费视频社区在线 | 在线看免费观看AV深夜影院| 小小影视日本动漫观看免费| 亚洲日韩一页精品发布| 亚洲人成免费网站|