加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

dwr 后台推送技术

发布时间:2020-12-16 01:32:58 所属栏目:百科 来源:网络整理
导读:实例分为两个页面 sendMsg.jsp页面 ,发送一段消息给后台 ,然后后台将消息推送到showMsg.jsp页面 web.xml配置 [html] view plain copy ? xml version = "1.0" encoding = "UTF-8" ? web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns

实例分为两个页面

sendMsg.jsp页面 ,发送一段消息给后台 ,然后后台将消息推送到showMsg.jsp页面

web.xml配置

[html] view plain copy
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID"version="2.5">
  3. <display-name>dwr3</display-name>
  4. <welcome-file-list>
  5. <welcome-file>index.jsp</welcome-file>
  6. </welcome-file-list>
  7. <servlet>
  8. <servlet-name>dwr-invoker</servlet-name>
  9. <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
  10. <init-param>
  11. <param-name>debug</param-name>
  12. <param-value>true</param-value>
  13. </init-param>
  14. <!--使用polling和comet的方式-->
  15. <init-param>
  16. <param-name>pollAndCometEnabled</param-name>
  17. <param-value>true</param-value>
  18. </init-param>
  19. <load-on-startup>1</load-on-startup>
  20. </servlet>
  21. <servlet-mapping>
  22. <url-pattern>/dwr/*</url-pattern>
  23. </servlet-mapping>
  24. </web-app>

sendMsg.java 推送类

[java] copy
    packagecom.zf.dwr;
  1. importjava.util.Collection;
  2. importorg.directwebremoting.ScriptBuffer;
  3. importorg.directwebremoting.ScriptSession;
  4. importorg.directwebremoting.WebContext;
  5. importorg.directwebremoting.WebContextFactory;
  6. importorg.directwebremoting.proxy.dwr.Util;
  7. publicclassSendMsg{
  8. @SuppressWarnings("deprecation")
  9. publicvoidsendMsg(Stringmsg){
  10. //得到上下文
  11. WebContextcontex=WebContextFactory.get();
  12. //得到要推送到的页面dwr3为项目名称,一定要加上。
  13. Collection<ScriptSession>sessions=contex.getScriptSessionsByPage("/dwr3/showMsg.jsp");
  14. //不知道该怎么解释这个,
  15. Utilutil=newUtil(sessions);
  16. //下面是创建一个javascript脚本,相当于在页面脚本中添加了一句show(msg);
  17. ScriptBuffersb=newScriptBuffer();
  18. sb.appendScript("show(");
  19. sb.appendData(msg);
  20. sb.appendScript(")");
  21. //推送
  22. util.addScript(sb);
  23. }
  24. }

dwr.xml配置

copy
    <!DOCTYPEdwrPUBLIC
  1. "-//GetAheadLimited//DTDDirectWebRemoting3.0//EN"
  2. "http://getahead.org/dwr/dwr30.dtd">
  3. <dwr>
  4. <allow>
  5. <createcreator="new"javascript="SendMsg">
  6. <paramname="class">com.zf.dwr.SendMsg</param>
  7. </create>
  8. </allow>
  9. </dwr>

sendMsg.jsp

copy
    <%@pagelanguage="java"contentType="text/html;charset=utf-8"
  1. pageEncoding="utf-8"%>
  2. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
  6. <scripttype="text/javascript"src="dwr/util.js"></script>
  7. <scripttype="text/javascript"src="dwr/engine.js"></script>
  8. <scripttype="text/javascript"src="dwr/interface/SendMsg.js"></script>
  9. <scripttype="text/javascript"src="jquery-1.7.1.js"></script>
  10. <scripttype="text/javascript">
  11. $(function(){
  12. dwr.engine.setActiveReverseAjax(true);
  13. $("#but").click(function(){
  14. SendMsg.sendMsg($("#msg").val());
  15. });
  16. });
  17. </script>
  18. <title>Inserttitlehere</title>
  19. </head>
  20. <body>
  21. <inputtype="text"id="msg"/>
  22. <inputtype="button"value="发送"id="but"/>
  23. </body>
  24. </html>

showMsg.jsp

copy
    <scripttype="text/javascript"src="jquery-1.7.1.js"></script>
  1. <scripttype="text/javascript">
  2. $(function(){
  3. //这句话千万不能少,表示允许使用推送技术
  4. //这个函数是提供给后台推送的时候调用的
  5. functionshow(msg){
  6. $("#message").text(msg);
  7. </script>
  8. <title>Inserttitlehere</title>
  9. </head>
  10. <body>
  11. <divid="message"style="width:200px;height:200px;border:1pxsolidred;text-align:center;padding:5px;"></div>
  12. </html>




使用dwr推送技术时 需要有WebContext 对象,但是WebContext 对象需要通过WebContextFactory.get();获取 , 而WebContextFactory.get(); 方法只有当页面请求某个java方法时,在该方法中调用WebContextFactory.get(); 才能得到值。 否则是取不到值的。

然后通过WebContext 获取指定的页面 。再向页面推送消息 。

有一个问题是当后来又新开了页面,却收不到消息 。

可以使用一个线程,去定时的更新Collection<ScriptSession> 对象

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读