`
5211422
  • 浏览: 204091 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dwr推送技术学习

阅读更多

例子:

 

web.xml文件配置:

          <servlet>
 <servlet-name>dwr-invoker</servlet-name>
 <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
 <init-param>
  <param-name>debug</param-name>
  <param-value>true</param-value>
 </init-param>
 
 <!-- DWR默认采用piggyback方式 -->
 
 <!-- 使用polling和comet的方式 -->
 <init-param>
  <param-name>pollAndCometEnabled</param-name>
  <param-value>true</param-value>
 </init-param>
 
 <!-- comet方式 -->
 <!--
 <init-param>
  <param-name>activeReverseAjaxEnabled</param-name>
  <param-value>true</param-value>
 </init-param>
  -->
 
 <!-- polling方式:在comet方式的基础之上,再配置以下参数 -->
 <!--
 <init-param>
  <param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
  <param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
 </init-param>
  -->
  
 <!-- 毫秒数。页面默认的请求间隔时间是5秒 -->
 <!--
 <init-param>
  <param-name>disconnectedTime</param-name>
  <param-value>60000</param-value>
 </init-param>
  -->
 
 <load-on-startup>1</load-on-startup>     
</servlet>

<servlet-mapping>
 <servlet-name>dwr-invoker</servlet-name>
 <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

 

java方法:

 

import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.concurrent.locks.ReentrantLock;

import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.proxy.dwr.Util;

import uk.ltd.getahead.dwr.WebContext;
import uk.ltd.getahead.dwr.WebContextFactory;

 

private static LinkedList<Message> messages = new LinkedList<Message>();
 private static ReentrantLock lock = new ReentrantLock(); //JDK5锁
 
 public void addMessage(String text){
  System.out.println("---------");
  try{
   lock.lock();
   
   if(text!=null && text.trim().length()>0){
    messages.addFirst(new Message(text));
    if(messages.size()>10){
     messages.removeLast();
    }
   }
  }catch(Exception ex){
   ex.printStackTrace();
  }finally{
   lock.unlock();
  }
  System.out.println("----1-----");
  //获得DWR上下文
  WebContext webContext = WebContextFactory.get();
  System.out.println("----2-----");
  //获取当前页面URL,比如/ext3/test_tag.jsp
  String currentPage = webContext.getCurrentPage();
  System.out.println("----3-----");
  //当前脚本sessin
  ScriptSession scriptSession = webContext.getScriptSession();
  System.out.println("-----4----");
  //设置页面控件的值
  Util util = new Util(scriptSession);
  util.setValue("text", ""); //这里是清空页面输入框的值
  System.out.println("----5-----");
  //设置脚本sessin的属性值
  scriptSession.setAttribute("uid", "cjm");
  System.out.println("------6---");
  //获取脚本session的属性值
  for(Iterator it=scriptSession.getAttributeNames();it.hasNext();){
   String attrName = (String)it.next();
   System.out.println(attrName + "=" + scriptSession.getAttribute(attrName));
  }
  System.out.println("----7-----");
  //获取所有浏览当前页面的脚本session
  Collection<ScriptSession> sessions = webContext.getScriptSessionsByPage(currentPage);
  System.out.println("----8-----");
  Util utilAll = new Util(sessions);
  System.out.println("-----9----");
  //执行客户端脚本
  ScriptBuffer script = new ScriptBuffer();
  script.appendScript("clientFunction(")
    .appendData(scriptSession.getAttribute("uid"))
    .appendScript(");");
  System.out.println("----10-----");
  for(ScriptSession session: sessions){
   session.addScript(script);
  }
  System.out.println("----11-----");
  //更新这些脚本session的一些元素
  utilAll.removeAllOptions("messages");
  utilAll.addOptions("messages", messages, "id", "text");
 }

 

jsp页面:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.zzst.application.meeting.util.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'ajax0729.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  <script type='text/javascript' src='<%=MeetingConfig.CONTENT_PATH%>/dwr/engine.js'> </script>
  <script type='text/javascript' src='<%=MeetingConfig.CONTENT_PATH%>/dwr/util.js'> </script>
  <script type='text/javascript' src='<%=MeetingConfig.CONTENT_PATH %>/dwr/interface/DwrMethod.js'></script>
  </head>
  <body onload="dwr.engine.setActiveReverseAjax(true);sendMessage();">
    <p>输入信息: <input id="text" onkeypress="dwr.util.onReturn(event, sendMessage)" />
 <input type="button" value="Send" onclick="sendMessage()" /></p>
 <script type="text/javascript">
     function sendMessage() {
        DwrMethod.addMessage(dwr.util.getValue("text"));
     }
     function clientFunction(returnStr){
      //document.all.view.value="已经广播给所有看到这个页面的用户了"+returnStr
     }
 </script>
 <input id="view">
 <hr/>
 <select id="messages"></select>
  </body>
</html>

分享到:
评论
2 楼 Mr_Monotony 2012-10-09  
为什么我按照这个写了不行啊?。。 只有自己才能看到信息。 而且看代码好像存取的都是session的范围。 每个用户都有不同的Session。 如果用application的话到是可以吧。  求指教。 求讲解。。
1 楼 不过是过客 2011-10-14  
太厉害了,IE上推送有问题,到处找,看到大哥这个试了一盘,没问题了!

相关推荐

Global site tag (gtag.js) - Google Analytics