目录(?)[-]
- 首先放入struts2和dwr的jar包这个想必大家都知道了吧
- 下面是webxml的全部配置信息因为当初是ssh2一起整合的所以会有spring的配置信息
- 以下是dwr的全部配置信息dwrxml是放在WEB-INF下面就是和webxml在同一个目录的
- 这里还需要注意一点 dwr的过滤器和struts2 的过滤器都过滤的是整个项目所以会有冲突所以要在strutsxml中配置一下来解决中途问题
- 接下来就是在接收推送消息的界面引入dwr的js
- 其中enginejs和utiljs是在dwrjar包里面的在项目的WebRoot下面是找不到的如果你想看可以到dwrjar里面找肯定有然后还需要引入messageServicejs
- 在接收推送消息的界面body里面初始化一些东西
- 下面是 onPageLoad 方法的说明不用说明的都不用改只要copy到你的项目就ok了因为有些我也不是太懂哈
- 下面是DwrScriptSessionManagerUtiljava类的说明
- 到此接收端的一些操作就完成了下面是发送信息端的代码
- 当你点击发送按钮将推送信息的时候要用js触发这个方法
- 至此全部搞定了看似很简单但是有些地方还是不太清楚由于原项目不方便供给大家参考如果大家还有什么不懂的可以留言告诉我我会尽力帮助大家互相帮忙嘛
1,首先放入struts2和dwr的jar包,这个想必大家都知道了吧!
2,下面是web.xml的全部配置信息,因为当初是ssh2一起整合的,所以会有spring的配置信息,
- <?xmlversion="1.0"encoding="UTF-8"?>
- <web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
-
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:spring/applicationContext.xml</param-value>
- </context-param>
-
-
- <filter>
- <filter-name>OpenSessionInViewFilter</filter-name>
- <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
- </filter>
- <filter-mapping>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
-
- <servlet>
- <servlet-name>dwr-invoker</servlet-name>
- <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
- <init-param>
- <param-name>fileUploadMaxBytes</param-name>
- <param-value>25000</param-value>
- </init-param>
- <param-name>debug</param-name>
- <param-value>true</param-value>
- <param-name>accessLogLevel</param-name>
- <param-value>runtimeexception</param-value>
- <param-name>activeReverseAjaxEnabled</param-name>
- <param-name>initApplicationScopeCreatorsAtStartup</param-name>
- <param-name>jsonRpcEnabled</param-name>
- <param-name>jsonpEnabled</param-name>
- <param-name>preferDataUrlSchema</param-name>
- <param-value>false</param-value>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>dwr-invoker</servlet-name>
- <url-pattern>/dwr/*</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
3,以下是dwr的全部配置信息,dwr.xml是放在WEB-INF下面,就是和web.xml在同一个目录的
<!DOCTYPEdwrPUBLIC
- "-//GetAheadLimited//DTDDirectWebRemoting3.0//EN"
- "http://getahead.org/dwr/dwr30.dtd">
- <dwr>
- <allow>
<!--new的意思是每次都实例化一个,javascript的意思就是代替-param中的value的简称,可以在js中直接可以用messgeService调用
cn.ittec.zfx.service.impl.MessageServiceImpl中的方法-->
<createcreator="new"javascript="messageService">
- <paramname="class"value="cn.ittec.zfx.service.impl.MessageServiceImpl"/>
- </create>
- </allow>
- </dwr>
这里还需要注意一点 dwr的过滤器和struts2 的过滤器都过滤的是整个项目,所以会有冲突,所以要在struts.xml中配置一下来解决中途问题
<constantname="struts.action.excludePattern"value="/dwr/*"></constant>
4,接下来就是在接收推送消息的界面引入dwr的js
其中:engine.js和util.js是在dwr.jar包里面的,在项目的WebRoot下面是找不到的,如果你想看,可以到dwr.jar里面找,肯定有,然后还需要引入messageService.js
<scripttype="text/javascript"src="dwr/engine.js"></script>
- <scripttype="text/javascript"src="dwr/util.js"></script>
- <scripttype="text/javascript"src="dwr/interface/messageService.js"></script>
5,在接收推送消息的界面body里面初始化一些东西
<scripttype="text/javascript">
functionunready(){
dwr.engine.setActiveReverseAjax(true);
- dwr.engine.setNotifyServerOnPageUnload(true);
- onPageLoad();
- }
-
-
-
- functiononPageLoad(){
varsendId=document.getElementById("sendId").value;
messageService.onPageLoad(sendId);
- </script>
6,下面是 onPageLoad 方法的说明(不用说明的都不用改,只要copy到你的项目就ok了,因为有些我也不是太懂,哈)
publicvoidonPageLoad(StringsendId){
- ScriptSessionscriptSession=WebContextFactory.get()
- .getScriptSession();
- scriptSession.setAttribute(sendId,sendId);
DwrScriptSessionManagerUtildwrScriptSessionManagerUtil=newDwrScriptSessionManagerUtil();
- try{
- dwrScriptSessionManagerUtil.init();
- }catch(ServletExceptione){
- e.printStackTrace();
- }
下面是DwrScriptSessionManagerUtil.java类的说明
packagecn.ittec.zfx.util;
- importjavax.servlet.ServletException;
- importjavax.servlet.http.HttpSession;
- importorg.directwebremoting.Container;
- importorg.directwebremoting.ServerContextFactory;
- importorg.directwebremoting.WebContextFactory;
- importorg.directwebremoting.event.ScriptSessionEvent;
- importorg.directwebremoting.event.ScriptSessionListener;
- importorg.directwebremoting.extend.ScriptSessionManager;
- importorg.directwebremoting.servlet.DwrServlet;
- importcn.ittec.zfx.domain.User;
- publicclassDwrScriptSessionManagerUtilextendsDwrServlet{
- privatestaticfinallongserialVersionUID=1L;
- publicvoidinit()throwsServletException{
- Containercontainer=ServerContextFactory.get().getContainer();
- ScriptSessionManagermanager=container
- .getBean(ScriptSessionManager.class);
- ScriptSessionListenerlistener=newScriptSessionListener(){
- publicvoidsessionCreated(ScriptSessionEventev){
- HttpSessionsession=WebContextFactory.get().getSession();
Useruser=(User)session.getAttribute("user");
- StringuserId=user.getId()+"";
-
- ev.getSession().setAttribute("userId",userId);
- }
- publicvoidsessionDestroyed(ScriptSessionEventev){
- };
- manager.addScriptSessionListener(listener);
- }
7,到此接收端的一些操作就完成了,下面是发送信息端的代码。
当你点击发送按钮将推送信息的时候要用js触发这个方法
messageService.pushMessagee(id,name,contextTwo);
下面是pushMessagee的代码:
<precode_snippet_id="207359"snippet_file_name="blog_20140227_27_6582088"class="java"name="code">publicvoidpushMessagee(Stringuserid,Stringname,StringcontextTwo)throwsException{
- finalStringuserId=userid;//接收端用户的id</pre><precode_snippet_id="207359"snippet_file_name="blog_20140227_28_2405394"class="java"name="code">finalStringuserName=name;//发送端的name,告诉他是谁谁谁发的,类似QQ
- finalStringautoMessage=contextTwo;//将要发送的内容
- Browser.withAllSessionsFiltered(newScriptSessionFilter(){
- publicbooleanmatch(ScriptSessionsession){
- if(session.getAttribute("userId")==null){
- returnfalse;
- else{
- return(session.getAttribute("userId")).equals(userId);
- },newRunnable(){
- privateScriptBufferscript=newScriptBuffer();
- publicvoidrun(){
- </pre><precode_snippet_id="207359"snippet_file_name="blog_20140227_29_9864902"class="java"name="code">//这里比较重要了。showMessage是接收页面js中的方法名,userName和antoMessage分别是方法的参数,信息全部发送过去了,接下来你要弹框还是写到页面就看你的需求了,</pre><precode_snippet_id="207359"snippet_file_name="blog_20140227_30_3736360"class="java"name="code">script.appendCall("showMessage",userName,autoMessage);
- Collection<ScriptSession>sessions=Browser
- .getTargetSessions();
- for(ScriptSessionscriptSession:sessions){
- scriptSession.addScript(script);
- });
- }</pre><br>
- <pre></pre>
- <h3><aname="t11"></a><br>
- 8,至此全部搞定了,看似很简单,但是有些地方还是不太清楚,由于原项目不方便供给大家参考,如果大家还有什么不懂的,可以留言告诉我,我会尽力帮助大家,互相帮忙嘛!!</h3>
- <p></p>
- <p></p>
- <p></p>
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|