背景:用到DWR主要是做服务器推技术;项目以及架构完成,基于SSH的;因为要做推,所以我还得从新把DWR添加进来。
我的项目应用配置如下:
web.xml (其中的调试的初始参数的含义我都写清楚了,就不进行累赘的描述了)
<!-- dwr框架配置文件 -->
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<!-- 默认的servlet -->
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<!-- 调试DWR,发布系统时应将其设为false -->
<init-param>
<description>调试DWR,发布系统时应将其设为false</description>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<description>使用服务器推技术(反转AJAX)</description>
<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>org.directwebremoting.extend.ServerLoadMonitor</param-name>
<param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>
<init-param>
<param-name>pollAndCometEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>500</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
<!-- 跨域调用配置信息,不是必须的 -->
<!--
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
-->
<!-- 在WEB启动时是否创建范围为application的creator -->
<!--
<init-param>
<description>在WEB启动时是否创建范围为application的creator</description>
<param-name>
initApplicationScopeCreatorsAtStartup
</param-name>
<param-value>true</param-value>
</init-param>
-->
<!-- DWR默认采用piggyback(客户端请求)方式 -->
<!-- comet(长连接)方式 -->
<!-- 在2.0.4之后可以设置长连接的时间通过maxwaitAfterwrite参数进行设置 -->
<!--
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>500</param-value>
</init-param>
-->
<!-- polling(轮询)方式:在comet方式的基础之上,再配置以下参数 -->
<!--
<init-param>
<param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
<param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>
-->
<!-- 设定轮询求情的时间,参数是毫秒。页面默认的请求间隔时间是5秒 -->
<!-- 貌似2.0.2之前的版本的disconnecedTime存在错误,需要添加timeToNextPoll参数(未测试) -->
<!--
<init-param>
<param-name>disconnectedTime</param-name>
<param-value>6000</param-value>
</init-param>
<init-param>
<param-name>timeToNextPoll</param-name>
<param-value>6000</param-value>
</init-param>
-->
<!-- 使用polling和comet的方式 -->
<!--
<init-param>
<param-name>pollAndCometEnabled</param-name>
<param-value>true</param-value>
</init-param>
-->
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
dwr.xml
<dwr>
<allow>
<create javascript="DWRService" creator="spring" >
<param name="beanName" value="DWRService"/>
</create>
</allow>
</dwr>
applicaltionContext.xml
先引入命名空间:
xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xsi:schemaLocation="
http://www.directwebremoting.org/schema/spring-dwr
http://www.directwebremoting.org/schema/spring-dwr/spring-dwr-3.0.xsd">
再设置做推技术的bean文件
<!-- 配置dwr -->
<bean id="DWRService" class="com.wenice.web.dwr.DWRService">
<dwr:remote javascript="DWRService">
<dwr:include method="send" />
</dwr:remote>
</bean>
java代码:
/**
* 处理发送信息相关
*
* @author 张阳
*
*/
public class DWRService {
/** 保存当前在线scriptSession列表 */
public static HashMap<String, ScriptSession> scriptSessions = new HashMap<String, ScriptSession>();
/**
* 更新scriptSession列表
*
* @param username 用户名
* @param flag 是否存入map中
* @param request 请求
* @return
*/
public String updateUsersList(String username, boolean flag, HttpServletRequest request) {
// 这里取会话(HttpSession)的id为用户id
String httpSessionId = request.getSession().getId();
if (flag) {
this.setScriptSessionFlag(username);
//将HttpSessionid和页面脚本session绑定
scriptSessions.put(httpSessionId, WebContextFactory.get().getScriptSession());
}else{
return null;
}
return httpSessionId;
}
/**
* 将用户id和页面脚本session绑定
* @param userid
*/
public void setScriptSessionFlag(String username) {
WebContextFactory.get().getScriptSession().setAttribute("username", username);
}
/**
* 根据用户id获得指定用户的页面脚本session
* @param userid
* @param request
* @return
*/
@SuppressWarnings("unchecked")
public List<ScriptSession> getScriptSession(String userid, HttpServletRequest request,String server) {
List<ScriptSession> scriptSessionlist = new ArrayList<ScriptSession>();
ScriptSession scriptSessions = null;
java.util.Iterator it = this.scriptSessions.entrySet().iterator();
while(it.hasNext()){
java.util.Map.Entry entry = (java.util.Map.Entry)it.next();
ScriptSession session = (ScriptSession) entry.getValue();
String xuserid = (String) session.getAttribute("username");
if (xuserid != null && xuserid.equals(userid)) {
scriptSessionlist.add(session);
}
}
return scriptSessionlist;
}
/**
* 发送消息
* @param sender 发送者
* @param receiverid 接收者id
* @param msg 消息内容
* @param request
*/
public void send(String sender,String receiverid,String msg,String server,HttpServletRequest request){
List<ScriptSession> sessions = this.getScriptSession(receiverid, request,server);
for (ScriptSession scriptSession : sessions) {
if(null!=scriptSession){
Util util = new Util(scriptSession);
util.setStyle("messageImage", "display", "");
}
}
}
}
java的实现代码其实没有什么重要的;主要就是配置文件的设置。
其中遇到了许多问题;有一些也已经忘记了。都是有问题,就去百度google;
一:大概还记得就是找不到bean这个就是你dwr.xml配置的问题;如果你选用spring进行注入bean;如下:
<create javascript="DWRService" creator="spring" >
<param name="beanName" value="DWRService"/>
</create>
那么param中的name一定要等于:beanName;value是你spring中已经初始化的bean的名称
<bean id="DWRService" class="com.wenice.web.dwr.DWRService">
<dwr:remote javascript="DWRService">
<dwr:include method="send" />
</dwr:remote>
</bean>
第二个就是ie没有响应的问题。
二:发现进入ie的时候,后台会报failed to find parameter: batchId;这个问题纠结了我两天
今天发现是我配置文件写的有问题。我将之前写的dwr.xml中的
<convert converter="bean" match="com.wenice.domain.user"/>
还有applicationContext.xml中的
<dwr:configuration>
<dwr:convert type="bean" class="com.wenice.domain.user" />
</dwr:configuration>
删除了。
三:还有就是回调函数的问题;
这个问题你可以百度google就可以解决了。上面的两个问题是我找了很多帖子都没解决的。最后重新抽出项目才发现的问题。
下面上传一下我的小测试用例。大家互相学习学习
分享到:
相关推荐
dwr中文文档dwr中文文档dwr中文文档dwr中文文档dwr中文文档dwr中文文档dwr中文文档
DWR例子(完整调试版)DWR例子(完整调试版)DWR例子(完整调试版)DWR例子(完整调试版)
举实例说明了dwr环境配置,开发,以及在实际当中的应用
DWR中文文档DWR中文文档DWR中文文档DWR中文文档DWR中文文档
dwr3.0以及相关中文文档
dwr小项目及资料 实现前台javascript直接调用后台业务方法和后台方法进行ajax 反转调用前台javascript的方法
DWR技术 1. dwr.jar (现将dwr的jar包,到到项目的lib 目录下) 2. dwr.xml (在WEB-INF 目录下创建 dwr.xml 文件) 3. web.xml的配置 4. 页面的引入
dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr
DWR的中文官方文档,以及V0.9的文档一共两份 在网站不容易找到合适的说明.这个包里是整合网站的dwr所有帮助信息下载下来的,因为时间缘故没有及时做成电子文档,希望有时间了在做一份. 如果还是看着不方便建议到...
DWR3.0官方中文入门教程,和dwr3.0安装文件。
dwr ajax dwr框架 dwr中文手册
DWR中文文档.pdfDWR中文文档.pdfDWR中文文档.pdfDWR中文文档.pdf
其二就是解决了集成后的SpringBoot项目在开发环境和外置Tomcat环境下运行正常,但是以内置Tomcat独立JAR形式运行时,DWR框架无法初始化,项目无法正常运行的问题,这块主要修改了DWR源码资源加载相关代码。示例中...
dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架
Struts2与DWR在项目中的共存解决方案,通过此配置,可以解决struts2和DWR之间的冲突问题,很管用的!可以试试
DWR中文文档,DWR中文文档,DWR中文文档,DWR中文文档,DWR中文文档
本书的读者必须有一定的 Jsp,JavaScript,应用服务器(比如 Tomcat)的基础和使用经 验,否则请在看此教程前先去了解一下。当然附录里有一些 JavaScript 的教程。 本书可以当作一本 DWR 完整的教程,也可以当作一本...
dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;
学习的dwr的一个小例子,包括javascript中调用 返回元数据类型,List,Map,Pojo。很适合初学dwr的朋友。
好东西,绝对有用。有数据据表。我的东西全是一分,大家互相帮助了。