国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

dwr3實現消息精確推送詳細步驟

2019-11-14 21:52:52
字體:
來源:轉載
供稿:網友
dwr3實現消息精確推送詳細步驟

最近項目中需要用到推送消息,找了很久終于找到一篇不錯的文章,方便以后查看就轉載了,也分享給大家,希望能幫到有需要的人。

第一、在項目中引入dwr.jar,然后在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>

第二:在web.xml的同級目錄下新建dwr.xml文件,內容如下

<!DOCTYPE dwr PUBLIC

"-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"

"http://getahead.org/dwr/dwr30.dtd">

<dwr>

<alow>

<create creator="new" Javascript="MessagePush">

<param name="class" value="com.huatech.messageremind.service.MessagePush"/>

</create>

</alow>

</dwr>

這個是dwr的基本配置,MessagePush在頁面的javascript中使用,com.huatech.messageremind.service.MessagePush實現了想要調用的方法,MessagePush我覺得就相當于java類中的一個映射,在javascript中使用MessagePush.java類中實現的方法,即可在dwr中調用。

第三,要想使用dwr,還要在你想要推送的頁面中引入script,

<script type="text/javascript" src="<%=basepath%>dwr/engine.js"></script>

<script type="text/javascript" src="<%=basepath%>dwr/util.js"></script>

<script type="text/javascript" src="<%=basepath%>dwr/interface/MessagePush.js"></script>

可以看見,也引入了dwr.xml中配置的javascript,engine.js和util.js是必須引入的。

以上三點都是基本配置,沒什么好說的,想使用dwr,就得這么做。

第四,實現消息的精準推送

消息推送簡單,但是想實現精準推送就需要做一些別的操作了

1在任何一個用戶登錄的時候,都需要將其userId或者其他唯一性標識放入session中,我放的是userId,

這里就以userId為唯一性標識。

2在載入想推送的頁面時,需要onload一個我在MessagePush類中實現的方法,當然了,需要使用dwr調用

js的調用方法如下:

function onPageLoad(){

var userId = '${userinfo.humanid}';

MessagePush.onPageLoad(userId);

}

<body onload="dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);onPageLoad();>在onload中的三個函數都是必須的,其中dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);是dwr中的函數。

MessagePush類中實現的方法如下:

public void onPageLoad(String userId) {

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

scriptSession.setAttribute(userId, userId);

DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();

try {

dwrScriptSessionManagerUtil.init();

} catch (ServletException e) {

e.PRintStackTrace();

}

}

大家注意到,onPageLoad方法中還有一個名為DwrScriptSessionManagerUtil的類,該類如下實現:

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 userId =((User) session.getAttribute("userinfo")).getHumanid()+"";

System.out.println("a ScriptSession is created!");

ev.getSession().setAttribute("userId", userId);

}

public void sessionDestroyed(ScriptSessionEvent ev) {

System.out.println("a ScriptSession is distroyed");

}

};

manager.addScriptSessionListener(listener);

}

}

第四步是最最重要的,為了第四步我研究了兩天多,下面開始消息推送。

第五、消息推送

在你想要推送消息的時候,調用如下方法:

public void sendMessageAuto(String userid,String message) {

final String userId = userid ;

final String autoMessage = message;

Browser.withAllSessionsFiltered(new ScriptSessionFilter() {

public boolean match(ScriptSession session) {

if (session.getAttribute("userId") == null)

return false;

else

return (session.getAttribute("userId")).equals(userId);

}

}, 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);

}

}

});

}

userid即為你想推給消息的人,message為你想推送的消息,大家注意到這里script.appendCall("showMessage", autoMessage);

其中showMessage為在想推送的頁面中的javascript方法,autoMessage是這個方法的參數,這樣那個頁面就能得到推送的內容了,至于如何展現,就看你的需要了。

至此,一個dwr消息精準推送的步驟就寫完了,其實很多東西都不難,只是我們不知道該怎么用而已。

轉自:http://www.blogjava.net/stevenjohn/archive/2012/07/07/382447.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 房产| 板桥市| 鲁甸县| 宝应县| 班玛县| 周至县| 新和县| 盐亭县| 东乌| 南溪县| 磴口县| 昌吉市| 乌拉特中旗| 长宁区| 伊川县| 申扎县| 黄大仙区| 新巴尔虎右旗| 和顺县| 同仁县| 喀喇沁旗| 汤原县| 土默特右旗| 铜川市| 濉溪县| 盐山县| 册亨县| 辽宁省| 治多县| 长春市| 永顺县| 开远市| 辛集市| 浏阳市| 涟水县| 唐河县| 侯马市| 高雄市| 于都县| 普陀区| 遂溪县|