web推送技术DWR配置详述

本文详细介绍如何通过 DWR (Direct Web Remoting) 技术实现实时数据推送功能。主要内容包括配置 DWR 的 jar 文件及 .xml 文件,设置 web.xml 和 dwr.xml 文件参数,以及在 .jsp 和 Java 文件中编写相应代码。

       今天刚解决了dwr的问题,对于网络上的乱七八糟的问题回答比较无语,今天好好整理一下相关的内容,为自己记忆,也为方便大家使用大笑

1、jar文件调用

添加DWR3.jar

2、.xml文件的内容添加:

(1)web.xml添加如下内容:

<servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class> org.directwebremoting.servlet.DwrServlet</servlet-class>
    <init-param>
        <param-name>crossDomainSessionSecurity</param-name>
           <param-value>false</param-value>
        </init-param>
    <init-param>
      <param-name>allowScriptTagRemoting</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>classes</param-name>
      <param-value>java.lang.Object</param-value>
    </init-param>
    <init-param>
        <param-name>activeReverseAjaxEnabled</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
       <param-name>initApplicationScopeCreatorsAtStartup</param-name>
       <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>maxWaitAfterWrite</param-name>
        <param-value>3000</param-value>
    </init-param>
    <init-param>
        <param-name>debug</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>logLevel</param-name>
        <param-value>WARN</param-value>
    </init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
(2)添加dwr.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE dwr PUBLIC
          "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
          "http://getahead.org/dwr/dwr30.dtd">
  <dwr>
       <allow>
<create creator="new" javascript="MessagePush">
<param name="class" value="com.fro.dwr.MessagePush" />
<include method="pageOnLoad" />
</create>
      </allow>
  </dwr>
3、.jsp文件添加内容(建议使用在项目入口文件,这样整个项目中都可以自由调用)

<script type="text/javascript" src="dwr/engine.js">
</script>
<script type="text/javascript" src="dwr/util.js">
</script>
<script type="text/javascript" src="dwr/interface/MessagePush.js">
</script>

  <script type="text/javascript">

       function showMessage(val){
       alert(val);
  }

      </script>

<body onload="dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);onLoad();">

说明:上面的这些都是必须要有的引入文件以及调用方法,和body onload方法,具体就不详述的,需要的可以提问,或者查资料理解

4、java文件

新建一个dwr文件,存储一下的三个.java 文件:

(1)DwrScriptSessionManagerUtil .java

public class DwrScriptSessionManagerUtil extends DwrServlet{


private static final long serialVersionUID = 1L;


public void init() throws ServletException {
 Container container = ServerContextFactory.get().getContainer();
     
 ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);
     
      ScriptSessionListener listener = new ScriptSessionListener() { 
      public void sessionCreated(ScriptSessionEvent ev) {
                    HttpSession session = WebContextFactory.get().getSession();
                    ev.getSession().setAttribute("userId", "admin");
             }
             public void sessionDestroyed(ScriptSessionEvent ev) {
             }
      };
      
      manager.addScriptSessionListener(listener);
  }


}

(2)MessagePush .java

public class MessagePush {


    public void pageOnLoad() {
        ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
        HttpSession session = WebContextFactory.get().getSession();
      String userId = "admin";
        scriptSession.setAttribute(userId, userId);
        DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();
        try {
               dwrScriptSessionManagerUtil.init();
        } catch (ServletException e) {
               e.printStackTrace();
        }
    }

}

(3)SendMessage .java

public class SendMessage {

    public void sendMessageAuto( String message) {


    try {

System.out.println("message"+message);
        final String autoMessage = message; 
        Browser.withAllSessionsFiltered(new ScriptSessionFilter(){
       public boolean match(ScriptSession session) {
        return true;
       }
        },new Runnable(){
               private ScriptBuffer script = new ScriptBuffer();
               public void run() {
                      script.appendCall("showMessage", autoMessage);
                      Collection<ScriptSession> sessions = Browser.getTargetSessions();
                      for (ScriptSession scriptSession : sessions) {
                             scriptSession.addScript(script);
                      }
                }
        });
    } catch (Exception e) {
e.printStackTrace();
}
    }
}

5、调用dwr方法

SendMessage msgs = new SendMessage();
msgs.sendMessageAuto("helloword!");

Ok,就可以华丽丽的实现dwr的推送了,这是完整的一套代码,保证正常运行,不过要注意导入jsp的三个js,据说这些是dwr自带和自动生成的js,只需引入即可,路径则为webroot的根路径下,不同项目路径有偏差自己调整。写完了,这些当然还存在一些冗余代码,理解深的可自行删减,修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值