您的位置:首页 > 编程语言 > Java开发

dwr消息推送---向指定用户推送

2017-06-27 16:16 423 查看
页面消息推送:

第一步:导入需要的两个Jar包:(下载地址:http://directwebremoting.org/dwr/downloads/index.html)
· dwr.jar

· commons-logging-1.1.1.jar

第二步:在web.xml文件中添加 (目录在WebContent/WEB-INF/lib/下)
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>

<!-- 指定DWR核心Servlet处于调试状态 -->
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<!-- 设置使用反向Ajax技术 -->
<init-param>
<param-name>activeReverseAjaxEnabled</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>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>initApplicationScopeCreatorsAtStartup</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>

第三步:创建dwr.xml文件 (放在与web.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="MessagePush">
<param name="class" value="com.videocon.util.MessagePush"/>
</create>
<create creator="new" javascript="TestPush">
<param name="class" value="com.videocon.util.Test"/>
</create>
</allow>
</dwr>

第四步:根据dwr.xml文件暴露出的class,写具体的类

MessagePush.java

public class MessagePush{
public void onPageLoad(String userName) {

ScriptSession scriptSession = WebContextFactory.get().getScriptSession();

scriptSession.setAttribute(userName, userName);

DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();

try {

dwrScriptSessionManagerUtil.init();
System.out.println("cacaca");

} catch (ServletException e) {

e.printStackTrace();

}
}
}
Test.java

public class Test{
public static void sendMessageAuto(String username, String message){

final String userName = username;
final String autoMessage = message;
Browser.withAllSessionsFiltered(new ScriptSessionFilter() {
public boolean match(ScriptSession session){
System.out.println(session.getAttribute("userName"));
if (session.getAttribute("userName") == null)
return false;
else
return (session.getAttribute("userName")).equals(userName);
}
}, new Runnable(){

private ScriptBuffer script = new ScriptBuffer();

public void run(){
System.out.println("进入方法。。。");
script.appendCall("showMessage",autoMessage);

Collection<ScriptSession> sessions = Browser.getTargetSessions();
for (ScriptSession scriptSession : sessions){
scriptSession.addScript(script);
}
}
});
}
}
还要添加一个工具类DwrScriptSessionManagerUtil.java

public class DwrScriptSessionManagerUtil extends DwrServlet{

private static final long serialVersionUID = -7504612622407420071L;

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();

String userName =((PersonInfo) session.getAttribute("person")).getUsername()+"";
System.out.println("a ScriptSession is created!");
ev.getSession().setAttribute("userName", userName);
}
public void sessionDestroyed(ScriptSessionEvent ev) {
System.out.println("a ScriptSession is distroyed");
}
};
manager.addScriptSessionListener(listener);
}
}


第五步:写推送端的界面:

具体我就不写了,这里只写跟推送有关的jsp页面代码。

1.先引入js,engine.js 文件 是dwr的引擎文件,util.js 是dwr自带的工具js,TestPush.js就是你在dwr.xml文件中配置的javaScript的别名,这里只需要引入即可.

<script type="text/javascript" src="${ctx!}/dwr/engine.js"></script>
<script type="text/javascript" src="${ctx!}/dwr/util.js"></script>
<script type="text/javascript" src="${ctx!}/dwr/interface/TestPush.js"></script>
2.页面js代码

$("#button").click(function(){
test();
});

function test() {  
      var msg = $("#username").val();
      console.log("推送中。。。"+msg);
      TestPush.sendMessageAuto(msg,"哈哈哈");  
              
} 


第六步:写接收端的界面

1.先引入js,engine.js 文件 是dwr的引擎文件,util.js 是dwr自带的工具js,MessagePush.js就是你在dwr.xml文件中配置的javaScript的别名,这里只需要引入即可.

<script type="text/javascript" src="${ctx!}/dwr/engine.js"></script>
<script type="text/javascript" src="${ctx!}/dwr/util.js"></script>
<script type="text/javascript" src="${ctx!}/dwr/interface/MessagePush.js"></script>
2.页面代码

$(document).ready(function(){
onPageLoad();
dwr.engine.setActiveReverseAjax(true);
dwr.engine.setNotifyServerOnPageUnload(true);

});

//通过该方法与后台交互,确保推送时能找到指定用户
function onPageLoad(){

var xx = 'username';
MessagePush.onPageLoad(xx);

}
 //推送信息  
function showMessage(autoMessage){  
    alert(autoMessage);//获取推送信息
      
                     
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dwr 消息推送 java