DWR的搭建及简单使用

DWR_各种方法调用、配置总结 一、dwr配置篇之web.xml  1、最小配置dwr-invokeruk.ltd.getahead.dwr.DWRServletdwr-invoker/dwr/*2、当我们想看DWR自动生成的测试页(Using debug/test mode)时,可在servlet配置中加上debugtrue这个参数DWR默认是false。如果选择true, 阅读详情

 DWR(Direct Web Remoting)是一个WEB远程调用框架.是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR servlet 以及 JavaScript 库.它

为每一个服务器端的java对象生成一个javaScript对象,让前台开发的程序员,像使用本地javascript对象一样,去使用服务器端的java对象,而不必去关心网络的传输和参数类

型转化的细节
,其基本实现思想是对于服务器端每一个javabean,在客户端都会生成一个javascript对象。两个对象中的方法是一样的。当用户调用javascript对象的方法时,这个方法会通过网

络,去调用服务器端javabean,而这种通信过程,对用户来讲并不知情。
其搭建过程如下:
step 1. 配置 dwr 提供的Servlet .
* 导入 dwr.jar包
* 在 web.xml 中配置 dwr 的Sevlet,如下:
          <servlet>
           <servlet-name>dwrServlet</servlet-name>
           <servlet-class>org.directwebremoting.servlet.DWRServlet</servlet-class>
  <init-param> <!--此处开始的四行在测试时必须,否则会出现"Access to debug pages is denied. "信息.如果不写在正常使用时是不会受影响的,只是一个调试

设置而已-->
    <param-name>debug</param-name>
    <param-value>true</param-value>
   </init-param>
          </servlet> 
          <servlet-mapping>
           <servlet-name>dwrServlet</servlet-name>
           <url-pattern>/dwr/*</url-pattern>
          </servlet-mapping>
step 2. 在dwr.xml 中配置代理 
 在<allow></allow>标签内插入如下内容:
 <create javascript="要起的名字" creator="new">
             <param name="class" value="包全名.类名"/>
        </create> 
 如果是自己写的类那么配置如下内容,其实就是转换,意思是使用BeanConverter类进行转换.
 <convert  converter="bean" match="com.kettas.dwr.Student"/>
step 3. 测试 :http://localhost:8080/ajax/dwr
 启动服务器后输入如下地址:ajax为工程名,dwr为在web.xml文件中配置的<url-pattern>/dwr/*</url-pattern>名
==========================================================================================================
如果函数使用了泛型,那么需要使用<signatures>标签.
<signatures>标签是用来声明java方法中List、Set或者Map参数所包含的确切类,以便java代码作出判断。

signatures段只是用来确定泛型参数中的类型参数。DWR会自己使用反射机制或者运行时类型确定类型,或者假设它是一个String类型。所以:
不需要signatures -  没有泛型参数: public void method(String p); public void  method(String[] p);
需要signatures -  DWR不能通过反射确定: public void method(List<Date> p);  public void method(Map<String, WibbleBean> p);
不需要signatures -  DWR能正确的猜出: public void method(List<String> p);  public void method(Map<String, String> p);
不需要signatures -  DWR可以通过运行时类型确定: public List<Date> method(String  p);
没有必要让Javascript中的所有对象的key都是String类型 - 你可以使用其他类型作为key。但是他们在使用之前会被转换成String类型。DWR1.x用Javascript的特性把key转换成

String。DWR2.0可能会用toString()方法,在服务段进行这一转换。
<signatures> 写法如下:
 <signatures> 
  <![CDATA[
     import java.util.* ;//此处是导入所有要用到的包....
     import com.kettas.dwr.*;
     public List<Student> queryAllStudents() ;
  ]]>
 </signatures>
注意:<signatures>和<allow>标签要写在同一级上面.
当我测试时把泛型(配置文件和java代码中的)都去掉了但是也没有报错,但为了严谨,还是都写上吧,至少不会错
=========================================================================================================
页面上的写法:
<html>              
  <head>
  <script type='text/javascript' src='/ajax/dwr/interface/ 需要产生代理的请求.js'></script>
 <script type="text/javascript" src="/ajax/dwr/engine.js"></script> <!--这个是必不可少的,详细看下面文档-->
  </head>
  <body></body>
  </htm>
   
   url a : /ajax/a.html   //*此是访问时使用的url    
   URL b : /ajax/dwr/interface/JTestBean.js  //*此是引入生成的js文件URL的写法,注意interface,所有生成的js文件都是在其下的.
============================================================================================================
下面将一个测试过程代码全部按顺序列出来:
***********************************
Student.java
package com.kettas.dwr ;

public class Student{
 private Integer id ;
 private String name ;
 private int age ;
 
                           
 public Student(Integer id, String name, int age) {
  super();
  this.id = id;
  this.name = name;
  this.age = age;
 }


 public Student() {
  super();
 }


 public Integer getId() {
  return id;
 }


 public void setId(Integer id) {
  this.id = id;
 }


 public String getName() {
  return name;
 }


 public void setName(String name) {
  this.name = name;
 }


 public int getAge() {
  return age;
 }


 public void setAge(int age) {
  this.age = age;
 }
}
***************************************
TestBean.java
package com.kettas.dwr ;
import java.util.* ;
public class TestBean{
 public String sayHello( String user ){
  if( user == null || user.trim().length() == 0 ){
   return "hello everyone !" ; 
  }else{
   return "hello " + user + "!" ; 
  } 
 } 
 
 public List<Student> queryAllStudents(){  //在dwr.xml中是对此函数进行的泛型设置
  try{
   Thread.sleep( 3000 ) ;
  }catch( Exception e ){}
  List<Student> list = new ArrayList<Student>();
  for( int i = 0 ; i < 2 ; i++ ){
   Student stu = new Student();
   stu.setId( i ) ;
   stu.setName( "name" + i ) ;
   stu.setAge( 10 + i ) ;
   list.add( stu ) ; 
  }                   
  return list ;
 }
}
***************************************
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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"
  version="2.5">  
 
  <servlet>
   <servlet-name>dwrServlet</servlet-name>
   <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
   <init-param>
    <param-name>debug</param-name>
    <param-value>true</param-value>
   </init-param>
  </servlet>       
  <servlet-mapping>
   <servlet-name>dwrServlet</servlet-name>
   <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>
</web-app>
***************************************
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>
  <create javascript="JTestBean" creator="new">
   <param name="class" value="com.kettas.dwr.TestBean"/>
  </create>
  <convert  converter="bean" match="com.kettas.dwr.Student"/> 
 </allow>
 <signatures>  <!--函数使用了集合泛型时使用它-->
  <![CDATA[
     import java.util.* ;
     import com.kettas.dwr.*;
     public List<Student> queryAllStudents() ;
  ]]>
 </signatures> 
</dwr>   
***************************************
=============================================================================================================
另附engine.js的简述一篇:
Engine.js的功能
Engine.js对DWR非常重要,因为它是用来转换乃至动态生成接口的javascript函数调用的,所以只要用到DWR的地方就需要它。
 DWREngine.setTimeout()
允许你在call和batch级别调用元数据选项设置超时时间。全局的DWREngine.setTimeout() 函数应用于所有的DWR调用。设置这个值为0可以关闭调用的超时设置(默认就是0)。
setTimeout()的单位是毫秒,如果一个调用超时,那么相应的错误处理器将被调用。比如下面是一个调用级别设置超时的例子:
Remote.method(params, {
callback:function(data) { alert("it worked"); },
errorHandler:function(message) { alert("it broke"); },
timeout:1000
});
 批量调用
  使用batch来批量的执行远程调用。这样可以减少与服务器的交互次数,进而提高反应速度。例如:
DWREngine.begingBatch();
其它的功能操作...........
DWREngine.endBatch();
在批量处理中,DWR会小心的处理保证所有的回调函数都会被调用,注意:不能在batch里面执行同步调用,若batch中设置了不同的超时,只有最后一个是有效的。
--->ajax一般是异步进行的如果人为的让它顺序的执行可以用函数:
DWREngine.setOrdered(boolean)设置为true.但是这样会减慢应用程序
--->错误警告和超时
例子解析:
Remote.method(params, {
callback:function(data) { alert("it worked"); },
errorHandler:function(message) { alert("it broke"); },
timeout:1000
});
如果方法Remote.method调用在1000毫秒没有调用callback(回调函数),就开始执行下面的errorHandler函数,错误处理。
--->远程调用Hooks
DWREngine.setPreHook(function):在执行调用之前调用一个函数,但是没有参数传到这个函数(当你希望一些按钮在调用期间变灰来防止再次使用,这个功能会很有用)
DWREngine.setPostHook(function)与DWREngine.setPreHook(function)刚好相反
--->设置同步机制
DWREngine.setAsync(true);设置全局同步
Remote.method(params,{calback:function(data){......},async:true});设置局部同步
DWREngine.setMethod(newmethod)
newmethod必须是DWREngine.XMLHttpRequest或者DWREnginr.IFrame或者DWREngine.ScriptTag
举例:
-->DWREngine.setMethod(DWREnginr.IFrame); 全局的
-->Remote.method(params,{callback:function(data){.....},method:DWREnginr.IFrame})  单次调用
-->DWREngine.beginBatch();
   Remote.method1(params,callback1);
   Remote.method2(params,callback2);
   DWREngine.endBatch({method:DWREngine.IFrame});
DWREngine.setVerb(verb)设置传输的方法"get"或者"post"


         

dwr的DTD文件下载 这几天无聊开发了一个程序,需要AJAX要求也不高就使用DWR,但是程序始终报错,因为以前用过DWR,所以最后才发现是DTD文件路径已经被改变了,这里留下一个以防程序又找不到DTD 立即下载

相关推荐

避坑指南:在Linux服务器上用Conda安装antiSMASH 5.2.0(解决Jinja2报错和Matplotlib权限问题)

本文详细介绍了在Linux服务器上使用Conda安装antiSMASH 5.2.0的避坑指南,重点解决了Jinja2报错和Matplotlib权限问题。通过创建专用conda环境、安装指定版本依赖包和配置缓存目录,帮助用户顺利完成antiSMASH的本地部署,适用于批量处理基因组分析任务。

weixin_26911099的博客 296

DWR框架--让前端JS代码调用JAVA后端的方法

消息推送

weixin_42211693的博客 3343

保姆级教程:手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动

本文提供了一份详细的保姆级教程,手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动。从基础配置到RGMII接口的特殊设置,再到驱动开发的关键步骤和调试技巧,帮助开发者快速掌握PHY芯片的移植与开发。

weixin_33734785的博客 295

Dwr是什么以及简单应用

什么是DWRDWR是Direct Web Remoting 的缩写。 DWR 是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR servlet 以及 Java Script 库。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。从最简单的角度来说,DWR 是一个引擎,可以

sunshinegyy的专栏 3053

DWR类型转换学习笔记

一、DWR调用参数类型和返回类型都是JavaBean的java方法 1.index.jsp var u = { username : "123", password : "123" }; user.checkLogin(u, function(data) { alert("username="+data.username+";password="+data.p...

zxingchao2009的专栏------用博客记录技术成长的点点滴滴 145

DWR搭建使用方法

 DWR搭建使用方法DWR介绍:DWR是一个Java开源库,帮助你实现Ajax网站。它可以让你在浏览器中的Javascript代码调用Web服务器上的Java,就像在Java代码就在浏览器中一样。DWR主要包括两部分: 在服务器上运行的Servlet来处理请求并把结果返回浏览器。 运行在浏览器上的Javascript,可以发送请求,并动态改变页面。

于仁嘉的博客 1224

DWR框架搭建使用

1、简介 DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。以上是摘自百度百科里面的定义。它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScr

hu1991die的专栏 4515

DWR搭建以及使用教程

点击打开链接

u012718056的博客 340

DWR框架-----搭建

DWR框架的搭建

lvkemitu的博客 478

dwr框架查看外放方法_DWR框架搭建以及使用

DWR(Direct Web Remoting)是一个Ajax的开源框架,用于改善web页面与Java类交互的远程服务器端的交互体验,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。从DWR官网下载最新版本的jar包,地址:http://directwebremoting.org/dwr/downloads/in...

weixin_35683697的博客 235

DWR框架搭建以及初级使用

1.DWR框架介绍: DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码) 它通过反射,将java翻译成javascript,然后利用回调机

新时代程序猿 429

DWR框架的搭建使用

DWR框架搭建以及使用     DWR(Direct Web Remoting)是一个Ajax的开源框架,用于改善web页面与Java类交互的远程服务器端的交互体验,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。   从DWR官网下载最新版本的jar包,地址:http://directwebre...

aiyongay1的博客 149

dwr引发的血案之二项目搭建

上一文说到

weu135的专栏 1570

dwr框架搭建

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发 包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。 下面就开始写我们的第一个dwr...

chuwuling4009的博客 184
上一篇: 关于OracleXE的备份恢复(简介)
下一篇: div和span的一点区别
arthurzil
博客等级 码龄17年 12粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值