`

DWR入门简介

    博客分类:
  • DWR
阅读更多

1.1简介

DWR主要分为二部分
A:一个运行在服务器端的Java类,它接受浏览器端请求,调用业务逻辑层(调用DAO数据访问层得到相应数据进行处理)并向浏览器发回响应.
B:一个运行在浏览器端的Javascript,它向Java类发送请求接受服务器端返回的数据,局部更新网页数据,达到页面无刷新的效果.

DWR的工作原理
DWR动态把Java类生成Javascript,让你在Javascript中调用Java类的相关方法(它由eventHandler去调用它,由DWR处理所有远程细节,包括倒置
(converting)所有的参数以及返回Javascript和Java之间的值)DWR主要作用是负责数据传递和转换.
Java本身是同步的,而Ajax是异步的,所以你有调用时要提供callback的函数.

 

1.2 DWR的Hello World
我的开发环境:
操作系统  :   XP Professional版本 2002 Service Pack2
开发工具  :   MyEclipse6.0
应用服务器:   Tomcat6.0.16
编译环境  :   JDK1.6.6

1.2.1 将DWR引入你的工程
1)将dwr.jar复制到工程WebRoot的WEB-INF/lib目录下
2)将dwr-2-src.zip\java\org\directwebremoting内的engine.js和util.js复制到WEB应用js文件夹下.
有相应的警告内容如下:
20行 :
if (dwr == null) var dwr = {};
Multiple annotations found at the line: -Use '==='to compare with 'null',-1 changed line
作了这样的修改:
 var dwr;
if (null == dwr){
   dwr = {};
}
警告消失!接下来二行作相应的修改就行了呀
我的理解:myeclipse6.0的Javascript做的相当规范.这点细节都不会放过!不过这是Java强类型语言的规范,应用在Javascript编译检查.
所以我们在编译程序时要养成好的编程习惯:1)先声明变量,再使用. 2)在做if判断时常量要放在左边,变量放在右边,并且注意空格不要忘写了.

52 ~ 54行:
dwr.engine.setTextHtmlHandler = function(handler){
  dwr.engine._textHtmlHandler = handler;
}
警告如下:
Expected';'and instead saw 'dwr'.
处理方式:在末尾加上分号就行了,如下:
dwr.engine.setTextHtmlHandler = function(handler){
  dwr.engine._textHtmlHandler = handler;
};
记住:上面其实就是dwr的一个变量声明,末尾一定要加上分号.

153行: if (dwr.engine._activeReverseAjax)return;
警告如下:Expected'{'and instead saw 'return'',
记住:在做判断时一定要加上括号{},这是个好的编程习惯.

380行的警告有点意思:
for (var i = 0; i < arguments.length - 3; i++) {
 //
}
把i++改成i=i+1或者i+=1就消除了警告.

其它警告类似就不做处理了.

1.2.2 编辑配置文件
1)web.xml

以下是我的web.xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="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">
 
  <servlet>
   <servlet-name>dwr-invoker</servlet-name>
   <servlet-class> org.directwebremoting.servlet.DwrServlet</servlet-class>
   <init-param>
    <param-name>debug</param-name> //在开发阶段设置调试模式为true,发布时为false
    <param-value>true</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>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

2)dwr.xml

注意事项:dwr.xml与web.xml文件同在WEB-INF目录下.

最简单的方式是:在dwr-2-src.zip下的web\WEB-INF找到dwr.xml配置文件,把首尾内容复制过来如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">

<dwr>
  <allow>
 //配置相应的Java类
  </allow>
</dwr>
在工程中有警告提示内容如下:
The file cannot be validated as the host "getahead.org" is currently unreachable.
但我它换成dwr10.dtd内容就消除了警告.
<!DOCTYPE dwr PUBLIC
 "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
 "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

myeclipse6还不能对dwr2进行有效的验证,在myeclipse6安装目录下的myecipse6\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.0.0.zmyeclipse60020070820\catalog-dtd中可以看到myeclipse6只有dwr10.dtd文件,没有dwr20.dtd文件,找到dwr20.dtd文件复制进来就行了.也可在工程中引入就可以了,在WEB-INF文件夹上右键 New XML(Basic Templates--->Next--->命名:dwr.xml--->Next--->选择首选项: Create XML file from a DTD file--->单击Import files...按钮选择路径到dwr-2-src.zip下找到DWR文件夹--->确定--->在引入进来的文件中勾选dwr20.dtd前复选框.在选择Browse...以便dwr.xml文件保存在工程中的位置-->WEB-INF--->Next--->OK
在WEB-INF目录下创建了一个dwr.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr SYSTEM "dwr20.dtd" >
<dwr>
 
</dwr>
在WEB-INF目录下的dwr20.dtd不能删除,否则dwr.xml报找不到dwr20.dtd警告.

3)编写第一个.jsp文件
<%@ page language="java"  pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
    <title>DWR2 Hello World</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
 <!--
       其中的${pageContext.request.contextPath}代表取得当前工程根路径,这个一定要加上,否则DWR报一个service未定义错误
       这句话也代替了在Jsp页面引入Java代码,增强了代码的可维护性:相当于(request.getContextPath()),其中的/dwr/interface/service.js
       是DWR自动生成的,service名字要与dwr.xml配置文件中的名字要一致.engine.js与util.js是DWR提供的增强功能,通常都引入.
       user.js为用户自定义的js函数./dwr/是在web.xml文件中定义的映射路径.
  -->
    <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/interface/service.js'></script>
    <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script>
    <script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/user/user.js"></script>  
   
  </head> 
  <body>
    <div align="center">
     <input type="text" name="name" id="name"/>
     <input type="button" id="test" value="测试" onClick="test();">
    </div>
  </body>
</html>

4)编辑user.js文件

function test(){ 
 var name = document.getElementById("name").value;
        //service在dwr.xml定义的名字
 service.sayhello(name,showName);
}

function showName(data){
 alert(data);
}

5)编写Java类文件
package net.lzd.dwr2.test;


public class Service {
 
 public String sayhello(String name){  
  return "Hello World "+name;  
 }

}

6)添加dwr.xml中的Java类与页面的Javascript之间的映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">

<dwr>
  <allow>
   <create javascript="service" creator="new">
    <param name="class" value="net.lzd.dwr2.test.Service"/>
    <include method="sayhello"/>
   </create>
  </allow>
 </dwr>
注意事项:如引入的是dwr20.dtd文件的声明,你在dwr.xml没有相应提示,你可把其中的2改为1,就有相应的提示功能如下:
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://getahead.org/dwr/dwr10.dtd">
运行时改为dwr20.dtd文件声明就行了,当然用dwr10.dtd文件也可.

7)调试DWR
http://localhost/DWR2_HelloWorld/dwr就可进行方法测试.
如你没有修改Tomcat 6.0\conf中的server.xml的
 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
在启动页面就是:http://localhost:8080/DWR2_HelloWorld/dwr
修改其中的port=80就可在运行页面时省略端口号如:
http://localhost/DWR2_HelloWorld/dwr,进入调试页面如下:

Classes known to DWR:
service (net.lzd.dwr2.test.Service) 点击service进入方法测试页面,这种结果是我们在web.xml中的设置debug为true起的作用.

Methods For: service (net.lzd.dwr2.test.Service)
To use this class in your javascript you will need the following script includes:

  <script type='text/javascript' src='/DWR2_HelloWorld/dwr/interface/service.js'></script>
  <script type='text/javascript' src='/DWR2_HelloWorld/dwr/engine.js'></script>

In addition there is an optional utility script:

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

Replies from DWR are shown with a yellow background if they are simple or in an alert box otherwise.
The inputs are evaluated as Javascript so strings must be quoted before execution.

There are 10 declared methods:

//这个是我们写的测试方法.你可在括号内输入数据点击边上的 Execute按钮就可得到测试结果.
sayhello(  ); 

//以上为一个Java类本身的方法,这个我们可以不关心.
wait( ); 
(Warning: overloaded methods are not recommended. See below)
(Warning: wait() is excluded: Method access is denied by rules in dwr.xml. See below)
wait( ,  ); 
(Warning: overloaded methods are not recommended. See below)
(Warning: wait() is excluded: Method access is denied by rules in dwr.xml. See below)
wait(  ); 
(Warning: overloaded methods are not recommended. See below)
(Warning: wait() is excluded: Method access is denied by rules in dwr.xml. See below)
hashCode( ); 
(Warning: hashCode() is excluded: Method access is denied by rules in dwr.xml. See below)
getClass( ); 
(Warning: No Converter for java.lang.Class. See below)


 

 

 

 

分享到:
评论
2 楼 liuzidong 2011-11-08  
你可在eclipse中去除相关验证就行了
1 楼 handsomestar 2011-11-07  
如何消除这些警告

相关推荐

    Dwr入门操作手册Dwr

    Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr...

    DWR+dwr入门手册

    在"DWR+dwr入门手册"中,你将深入了解到以下几个核心知识点: 1. **DWR的基本概念**:DWR的核心是Remoting Engine,它负责在客户端JavaScript和服务器端Java之间建立通信通道。DWR提供了一套API,包括`dwr.engine`...

    dwr入门 dwr学习资料

    DWR(Direct Web Remoting)是一...通过学习这套DWR入门资料,你将能够熟练地使用DWR创建动态、交互性强的Web应用,提高开发效率,同时提升用户体验。实践中不断探索,理论与实战相结合,将助你在Web开发领域更进一步。

    DWR入门例子(一个很好的dwr入门例子)

    在这个"DWR入门例子"中,我们将深入探讨如何使用DWR进行服务器和客户端之间的数据交换。 1. **DWR基本概念** - **反向AJAX**: DWR的核心理念是反向AJAX,即由服务器主动向客户端推送数据,而不仅仅是响应客户端的...

    dwr API dwr入门教程

    在DWR入门教程中,首先会介绍DWR的基本概念和工作原理。DWR的核心是将Java方法暴露给JavaScript,通过在服务器端创建一个称为"逆向Ajax"的通道,使得JavaScript能够调用远程服务器上的Java方法。这个过程涉及到几个...

    DWR中文文档 dwr入门 dwr.jar

    **DWR入门步骤:** 1. **引入依赖**:首先,你需要在项目中添加dwr.jar到类路径中,这将包含所有DWR运行所需的类和库。 2. **配置DWR**:在Web应用的Web-INF目录下创建dwr.xml配置文件,设置允许的远程接口和方法...

    Dwr入门操作手册及dwr包

    **DWR(Direct Web Remoting)入门操作手册及DWR包** DWR,全称Direct Web Remoting,是一个...通过深入学习"Dwr入门操作手册"并实践使用"dwr.jar",你可以掌握如何利用DWR构建交互性更强、用户体验更好的Web应用。

    STRUT2 DWR 入门STRUT2 DWR 入门STRUT2 DWR 入门STRUT2 DWR 入门

    STRUT2 DWR入门教程 DWR(Direct Web Remoting)是一种开源JavaScript库,它允许在Web应用程序中实现Ajax功能,使用户界面更加动态和交互性更强。与STRUT2框架结合使用,DWR可以为Java后端提供简单且高效的远程方法...

    Dwr入门操作手册

    《DWR入门操作手册》深度解析与实践指南 一、DWR配置与使用基础 DWR,全称为Direct Web Remoting,是一种使Java对象能够直接从JavaScript调用的技术,简化了Ajax开发流程,使得前后端交互更为直接和高效。本文档...

    dwr入门+springmvc实现

    DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java...

    dwr入门例子 返回list

    在“dwr入门例子 返回list”这个主题中,我们将深入探讨如何使用DWR从服务器返回列表数据到客户端。列表通常包含多个项目,如数据库查询结果,这些数据可以在网页上以表格或其他形式展示给用户。DWR提供了方便的方法...

    dwr入门.txt

    dwr入门中web.xml配置 dwr.xml的位置和配置路径 ,附带测试小案例

    DWR入门程序(1.0和3.0版本的测试工程)

    在"DWR入门程序--计算两个数之和及包含页面的例子(使用1.0版本).rar"中,我们可以看到一个简单的例子,展示了如何使用DWR 1.0进行数据交互。这个例子可能包括一个HTML页面,该页面包含一个JavaScript函数,该函数...

    软件工程DWR入门教程.docx

    软件工程 DWR 入门教程 DWR(Direct Web Remoting)是一种基于 Java 的远程方法调用技术,它允许在 Web 应用程序中将 Java 对象作为远程服务暴露给客户端,客户端可以通过 Ajax 调用这些服务。下面是 DWR 入门教程...

    dwr简单入门例子

    最近发现了一个java框架,这个框架已经...这个框架叫dwr,它可以在jsp页面编写js直接调用java的类的方法。原理其实就是它把你的java类发布成了接口服务,js的调用也是ajax的一些封装,有些地方使用这个框架真的很方便。

    最完整的DWR入门文档及DWR使用案例

    这个“最完整的DWR入门文档及DWR使用案例”包含的资源无疑将帮助你深入理解和高效使用DWR。 首先,DWR的核心功能是提供了一种跨域的通信机制,使得前端JavaScript可以直接调用后端Java方法,就像操作本地函数一样,...

    DWR入门demo

    在"DWR入门demo"中,我们可以学习到以下几个关键知识点: 1. **DWR的基本概念**:DWR的核心是提供了一个安全、高效的机制,通过AJAX(Asynchronous JavaScript and XML)技术实现在浏览器和服务器之间进行异步通信...

    DWR入门教程及实例(含源代码)

    本教程“DWR入门教程及实例(含源代码)”旨在帮助初学者快速掌握DWR的基本概念和使用方法。教程内容可能包括以下几个核心知识点: 1. **DWR概述**:讲解DWR的基本理念,如何通过HTTP协议实现JavaScript与Java之间...

    dwr入门资料,简单入门,让你轻松掌握dwr

    在"**dwr入门资料,简单入门,让你轻松掌握dwr**"的资源中,你可以期待学习到以下关键知识点: 1. **DWR的基本概念**:理解DWR的核心概念,如Remoting、Reverse Ajax和Caching,以及如何通过DWR实现浏览器与服务器...

    AJAX技术之DWR框架入门

    **AJAX技术之DWR框架入门** AJAX(Asynchronous JavaScript and XML)是一种在无需刷新整个页面的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使得网页实现异步更新。这种技术可以提升...

Global site tag (gtag.js) - Google Analytics