fsafdsafadsfafdsfdsafdafa

          liushengit

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            0 隨筆 :: 3 文章 :: 4 評論 :: 0 Trackbacks
          今天無意間看到了一篇關于dwr的文章,講的是反向Ajax,想了想半年前一個項目的功能需求如果用它實現就太完美了。
          項目要求是:數據庫中A表中如果有了新的數據,系統的管理界面上要實時的顯示出來,提醒給操作人員(是某種報警信息,好像特別重要)。

          當時的實現方法是:讓一Iframe里的頁面每隔多少秒就刷新一次,來監視數據庫A表的變化。這樣客戶端不斷地向服務發送請求,服務器被動的返回客戶端想要的數據。

          反向Ajax技術是服務器向客戶端主動的發關數據,很大的減少了服務的負擔。
          學習新的知識點就要多寫些自己的Demo,在這里寫一個最簡單的例子,以作筆記:

          sendMsg.jsp負責向表中添加數據(更新數據庫),showMsg.jsp用來實時顯示前者添加的信息。
          dwr.xml

          <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr//dwr30.dtd"> <dwr>  
              
          <allow>  
                  
          <create creator="new" javascript="SendMsg" scope="session">  
                      
          <param name="class" value="com.dwr.bean.SendMsg" />  
                  
          </create>  
              
          </allow>     
          </dwr> 

          SendMsg.java

          package com.dwr.bean;   
              
          import java.util.Collection;   
          import java.util.LinkedList;   
            
          import org.directwebremoting.WebContext;   
          import org.directwebremoting.WebContextFactory;   
          import org.directwebremoting.proxy.dwr.Util;   
          /**    
           * DWR反向Ajax示例    
           * 
          @author ︶ㄣ旺 
           * 
          @version 1.0    
           * 
          */     
          public class SendMsg       
          {      
              
          public static WebContext wctx = null;     
                 
              
          //用一個List代表數據庫 來儲存消息   
              private LinkedList list = new LinkedList();   
                 
              
          //調用添加和顯示方法      
              public void sendMsg(String msg)      
              {      
                     
                  list.addFirst(msg);   
                  
          //最多保留10條聊天記錄   
                  if(list.size()>10){   
                      list.removeLast();   
                  }              
                     
                  wctx 
          = WebContextFactory.get();      
                  Util utilThis 
          = new Util(wctx.getScriptSession());      
                     
                  
          //使用utilThis重置 Id 屬性為 msg 的文本框的內容   
                  utilThis.setValue("msg""請輸入信息");    
                     
                  String currentPage 
          = "/login/showMsg.jsp"//要推信息的頁面地址     
                     
                  
          //獲得所有已經打開此頁面的會話   
                  Collection sessions = wctx.getScriptSessionsByPage(currentPage);      
                  Util utilAll 
          = new Util(sessions);   
                     
                  
          //將消息從LinkedList中取出來,放放到一個字符串數組中   
                  
          //在這里遇到一個問題,就是直接用String[] msgs = (String[])list.toArray();時,報類型轉換錯誤   
                  
          //但如下,給toArray()方法傳遞一個空的數組就不報錯了,求解中.   
                  String[] msgs = new String[list.size()];   
                  msgs 
          = (String[]) list.toArray(msgs);   
                  
          //先清空頁面的消息內容,去除ul元素下所有元素   
                  utilAll.removeAllOptions("ul");           
                  
          //向頁面添加消息內容   
                  utilAll.addOptions("ul", msgs);   
              }      

          sendMsg.jsp

          <%@ page language="java" pageEncoding="UTF-8"%>    
          <%@ page isELIgnored="false" %>     
          <html>      
            
          <head>      
              
          <title>DWR反向Ajax示例</title>      
              
          <meta http-equiv="pragma" content="no-cache">      
              
          <meta http-equiv="cache-control" content="no-cache">      
              
          <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/interface/SendMsg.js'></script>      
              
          <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script>      
              
          <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script>     
              
          <script type="text/javascript">      
                  
          function sendMessage()      
                  {      
                      
          var msg = $("msg").value;              
                      SendMsg.sendMsg(msg);    
                  }      
              
          </script>      
            
          </head>      
            
          <body>       
            DWR反向Ajax示例信息添加
          <br>      
                  輸入信息:
          <input  type="text" id="msg" name="msg" onkeypress="dwr.util.onReturn(event,sendMessage)">  
            
          </body>      
          </html> 

          showMsg.jsp

          <%@ page language="java" pageEncoding="UTF-8"%>      
          <%@ page isELIgnored="false" %>  
          <html>      
            
          <head>      
              
          <title>DWR反向Ajax示例</title>      
              
          <meta http-equiv="pragma" content="no-cache">      
              
          <meta http-equiv="cache-control" content="no-cache">      
              
          <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script>      
              
          <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script>      
                 
            
          </head>      
            
          <body onload="dwr.engine.setActiveReverseAjax(true);">       
            DWR反向Ajax示例信息顯示
          <br>      
               ul:   
               
          <ul id="ul">  
                  
               
          </ul>      
            
          </body>     
              
          </html>   

           

          運行效果如圖:

           這時showMsg.jsp一直處于失去焦點狀態,卻能實時地顯示服務器端更新的數據


           

          posted on 2012-03-17 23:58 java web 閱讀(255) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 南和县| 青铜峡市| 潼关县| 肇东市| 山丹县| 汪清县| 比如县| 永济市| 平果县| 安远县| 明星| 长兴县| 泰和县| 潼南县| 昭觉县| 澳门| 保定市| 常熟市| 北票市| 旅游| 凯里市| 松潘县| 赣榆县| 天水市| 西吉县| 秭归县| 鲜城| 德州市| 忻州市| 鹤山市| 明星| 滨州市| 阳朔县| 崇信县| 枣强县| 莒南县| 宜宾县| 中阳县| 白城市| 霍州市| 开原市|