`
yangyangmilan
  • 浏览: 29845 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

dwr实例和一点小结

阅读更多

一、web.xml

 

 <servlet>

     <servlet-name>dwr-invoker</servlet-name>

<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

<init-param>

<param-name>debug</param-name>

<param-value>true</param-value>

</init-param>

 

<!-- DWR默认采用piggyback方式 -->

 

<!-- 使用polling和comet的方式 -->

<init-param>

<param-name>pollAndCometEnabled</param-name>

<param-value>true</param-value>

</init-param>

 

<!-- comet方式 -->

<!-- 

<init-param>

<param-name>activeReverseAjaxEnabled</param-name>

<param-value>true</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秒 -->

<!-- 

<init-param>

<param-name>disconnectedTime</param-name>

<param-value>60000</param-value> 

</init-param>

-->

 

<load-on-startup>1</load-on-startup>      

</servlet>

 

<servlet-mapping>

<servlet-name>dwr-invoker</servlet-name>

<url-pattern>/dwr/*</url-pattern>

</servlet-mapping>

 

 

这里有三种模式

1.piggyback。被动模式,不会增加连接的开销,一个连接请求后,把积累的信息发出去,然后被动的等待下一次连接。缺点,下一次连接的时间并不确定,可能根本就没有了,造成数据丢失或者不及时展现。

2.comet。 主动模式,客户端不停向服务器建立连接,如果有数据则可以马上带回。缺点是大部分的连接并没有数据带回,比较浪费。

3.polling。主动模式,与comet差不多,可以手工控制定时请求的时间间隔。

三种模式在web.xml里的配置决定。

 

 

二、dwr.xml

新建dwr.xml文件,路径和web.xml路径一致。

<dwr>

<create creator="new" javascript="DWRHelper">

<param name="class" value="com.cjm.web.dwr.DWRHelper"/>

<include method="addMessage"/>

<include method="test"/>

</create>

 

<convert converter="bean" match="com.cjm.web.dwr.Message">

<param name="include" value="id,text"/>

</convert>

 

</dwr>

 

1.create   creator表示实例的创建方式常见有new,spring,以上用new来做例子。内容比较简单。

2.convert  传递的参数转换。

 

三.java代码

1.Message的源码

public class Message {

private long id = System.currentTimeMillis();

private String text;

 

public Message(){

 

}

 

public Message(String newText){

text = newText;

}

 

public long getId() {

return id;

}

public void setId(long id) {

this.id = id;

}

public String getText() {

return text;

}

public void setText(String text) {

this.text = text;

}

}

 

2.DWRHelper类源码

public class DWRHelper {

private static LinkedList<Message> messages = new LinkedList<Message>();

private static ReentrantLock lock = new ReentrantLock(); //JDK5锁

 

public void addMessage(String text){

try{

lock.lock();

 

if(text!=null && text.trim().length()>0){

messages.addFirst(new Message(text));

if(messages.size()>10){

messages.removeLast();

}

}

}catch(Exception ex){

ex.printStackTrace();

}finally{

lock.unlock();

}

 

//获得DWR上下文

WebContext webContext = WebContextFactory.get();

 

//获取当前页面URL,比如/ext3/test_tag.jsp

String currentPage = webContext.getCurrentPage();

 

//当前脚本sessin

ScriptSession scriptSession = webContext.getScriptSession();

 

//设置页面控件的值

Util util = new Util(scriptSession);

util.setValue("text", ""); //这里是清空页面输入框的值

 

//设置脚本sessin的属性值

scriptSession.setAttribute("uid", "cjm");

 

//获取脚本session的属性值

for(Iterator it=scriptSession.getAttributeNames();it.hasNext();){

String attrName = (String)it.next();

System.out.println(attrName + "=" + scriptSession.getAttribute(attrName));

}

 

//获取所有浏览当前页面的脚本session

Collection<ScriptSession> sessions = webContext.getScriptSessionsByPage(currentPage);

 

Util utilAll = new Util(sessions);

 

//执行客户端脚本 

//这里就在拼写 js 语句

ScriptBuffer script = new ScriptBuffer();

script.appendScript("clientFunction(")

 .appendData(scriptSession.getAttribute("uid"))

 .appendScript(");");

 

for(ScriptSession session: sessions){

session.addScript(script);

}

 

//更新这些脚本session的一些元素

utilAll.removeAllOptions("messages");

utilAll.addOptions("messages", messages, "id", "text");

}

 

}

 

 

四、前段页面

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

<script type='text/javascript' src='/ext3/dwr/engine.js'></script>

<script type='text/javascript' src='/ext3/dwr/util.js'></script>

<script type='text/javascript' src='/ext3/dwr/interface/DWRHelper.js'></script>

  </head>

  

  <!-- 通过 dwr.engine.setActiveReverseAjax(true); 启动该页面的Reverse Ajax功能  -->

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

  <p>输入信息: <input id="text" onkeypress="dwr.util.onReturn(event, sendMessage)" /> 

<input type="button" value="Send" onclick="sendMessage()" /></p>

 

<script type="text/javascript">

    function sendMessage() {

      DWRHelper.addMessage(dwr.util.getValue("text"));

    }

</script>

 

<hr/>

<select id="messages"></select>

 

  </body>

</html>

 

五、小结

1.dwr.xml是关键,定义了java向js暴露的方法,和传递的参数。

2.<script type='text/javascript' src='/ext3/dwr/engine.js'></script>

<script type='text/javascript' src='/ext3/dwr/util.js'></script>

<script type='text/javascript' src='/ext3/dwr/interface/DWRHelper.js'></script> 

都是动态生成的js,其中DWRHelper.js就是dwr.xml中转换过来的

3.页面用DWRHelper.addMessage向后台发送数据,后台用session.addScript(script)调用前段js的方法。

 

分享到:
评论

相关推荐

    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实例dwr实例dwr实例dwr...

    dwr 实例 Dwr实例

    自己写的dwr实例。方便大家学习,包括jar文件,希望对大家有帮助

    dwr实例教程 很好的入门实例

    ### dwr实例教程知识点解析 #### 一、DWR简介及功能特点 DWR(Direct Web Remoting)是一种简化Ajax应用开发的技术框架。它能够使客户端的JavaScript代码直接调用服务器端的Java方法,实现数据的实时交互。与传统...

    dwr经典实例(9个常用实例)

    这个压缩包文件"dwrtest"很可能包含了9个经典的DWR实例,这些实例通常会展示DWR的主要功能和用法。以下是关于DWR的一些关键知识点的详细介绍: 1. **远程方法调用(RMI-like)**: DWR的核心特性是能够像本地方法一样...

    dwr+spring实例

    本实例"DWRSpring实例"是一个使用DWR与Spring框架结合的消息发布系统,包含了基础的CRUD(Create、Read、Update、Delete)操作。通过这个例子,我们可以深入理解DWR和Spring如何协同工作,以及它们在实际开发中的...

    dwr.demo dwr实例

    这个"**dwr.demo dwr实例**"很可能是用来展示如何在实际项目中集成和使用DWR的示例代码。在深入探讨之前,让我们先理解一下DWR的基本概念。 DWR的核心功能是提供了一个JavaScript API,使得JavaScript可以调用...

    Ajax框架:简单的dwr实例

    DWR(Direct Web Remoting)是一种流行的Ajax框架,它简化了JavaScript和Java之间的通信,使得前端与后端的数据交换变得更加便捷。 在DWR中,主要涉及到以下几个核心概念: 1. **Reverse AJAX**:DWR的核心特性之...

    dwr实例包.war

    dwr实例包

    dwr实例操作+rmi实例操作

    通过DWR和RMI的实例操作,我们可以构建出一个具有动态交互特性的Web应用,其中DWR负责前端与后端的异步通信,而RMI则处理后台的分布式计算和数据交换。这两个技术的结合可以为复杂的Web应用提供高效且灵活的解决方案...

    dwr实例和设计模式代码

    2. **单例模式**:在DWR配置中,很多组件如DWR Engine和CachingControl都是单例,确保在整个应用中只存在一个实例。 3. **代理模式**:DWR创建JavaScript对象作为服务器端对象的代理,使得客户端可以像操作本地对象...

    dwr工程实例,基本于myeclipse.

    在这个"dwr工程实例"中,我们将探讨如何基于MyEclipse集成开发环境来搭建和运行一个DWR项目。 首先,"dwr工程实例"表明我们将接触到一个实际的项目,这个项目已经包含了使用DWR技术的代码和配置。MyEclipse是基于...

    API_CHM\DWR实例.rar

    API_CHM DWR实例 API_CHM DWR实例 API_CHM DWR实例 API_CHM DWR实例 API_CHM DWR实例 API_CHM DWR实例 API_CHM DWR实例 API_CHM DWR实例

    freemarker与struts配置实例和dwr实例

    Freemarker、Struts2和DWR是Java Web开发中常用的三个组件,它们分别负责不同的职责,协同工作可以构建出高效、动态的Web应用程序。在这个实例中,我们将深入理解这三个技术,并通过具体配置来了解它们如何协同工作...

    dwr实例,从后台取数据显示

    Direct Web Remoting (DWR) 是一种...通过这个实例,你可以学习如何设置DWR环境,编写可远程调用的Java类,以及在前端使用DWR来获取和显示服务器数据。这将有助于你掌握AJAX和服务器通信的基本技巧,提升Web开发能力。

    dwr实例,dwr例子,能直接运行,很实用

    在这个“dwr实例”中,提供的内容可能是为了帮助初学者快速理解和应用DWR框架。通过直接运行的示例,学习者可以直观地看到DWR如何工作,如何在前端和后端之间传递数据,以及如何实现实时更新的Web界面。这对于理解...

    dwr完整资源=dwr包+dwr实例

    将资源放到tomcat中,运行tomcat以后自动解压成文件夹。里面包含dwr需要的jar包。初学者可以根据里面的实例学习。

    dwr实例,JavaScript调用java方法的小例子

    Direct Web Remoting (DWR) 是一种开源的Java框架,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行异步通信。...这个实例可以帮助你快速理解和上手DWR,进一步探索如何在实际项目中运用这一技术。

    dwr应用实例

    DWR通过AJAX技术提供了一种简单的方法来创建富客户端界面,使得用户可以在不刷新整个页面的情况下与服务器交换数据和调用方法。 ### 一、DWR基本概念 1. **AJAX**:Asynchronous JavaScript and XML(异步...

    dwr推技术官方实例

    标题中的“dwr推技术官方实例”是指DWR提供的关于其推技术的实际操作示例,这些示例可能涵盖了DWR 2.0.4及以上版本的最新功能。由于高质量的实例资源在网络上可能不易找到,所以这份实例集合显得尤为宝贵。 描述中...

    DWR以及DWR中文说明,DWR实例

    DWR以及中文说明,还有相关配置及实例.

Global site tag (gtag.js) - Google Analytics