ajax与dwr

简介:

DWR是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码(javascript)使用运行在WEB服务器上的JAVA函数(远程服务),就像它就在浏览器里一样.

 

它包含两个主要的部分:

   1、一个运行在服务器端的java servlet,它处理请求并向浏览器发回响应 (javaservlet类)

    2、运行在浏览器端的javascript,它发送请求而且还能动态更新网页。 (jsp页面,里面包含js代码)

工作原理:

DWR 工作原理是通过动态把 Java 类生成为 Javascript。它的代码就像 Ajax 魔法一样,你感觉调用就像发 生在浏览器端,但是实际上代码调用发生在服务器端,DWR 负责数据的传递和转换。它的优点在于不需要任何的网页浏览器插件就能运行在网页上。

 

Java 从根本上讲是同步机制,然而 AJAX 却是异步的。所以你调用远程方法时,当数据已经从网络上返回 的时候,你要提供有反调 (callback) 功能的 DWR。

Hello World:

一、引入开发所依赖的jar包

             dwr.jar,然后将它放在你 webapp 的 WEB-INF/lib 目录下

 

   二、配置web.xml文件

     <servlet>

           <servlet-name>dwr-invoker</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>dwr-invoker</servlet-name>

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

   </servlet-mapping>

增加dwr.xml配置文件:

在 web.xml 的同一目录下,创建 dwr.xml,并且将要被调用的 java 类写入其中

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting

2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">

<dwr>

<allow>

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

<param name="class" value="helloWorld.Service" />

</create>

</allow>

</dwr>

编写 service :

package helloWorld;

public class Service {

public String sayHello(String yourName) {

   //可以是访问数据库的复杂代码

 return "Hello World " + yourName;

 }

}

Jsp中调用 :

一、引入js

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

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

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

二、页面中调用

<script type="text/javascript">

function firstDwr(){

service.sayHello("Jorwen",callBackHello);

}

function callBackHello(data){

alert(data);

}

</script>

<init>标签:

可以定义Creator 、Converter

 

<allow>标签 :

定义了 DWR 能够创建和转换的类

<allow>

<create creator="..." javascript="..." scope="...">

<param name="..." value="..." />

<auth method="..." role="..." />

<exclude method="..." />

<include method="..." />

</create>

...

</allow>

属性:

creator 创造器

         常见的有:new  spring  等

Javascript

      在浏览器里给你创建的对象命名

scope

       和定义在 servlet 的 scope 一样大的范围,它允许你指定哪个 bean 是可以获得的。选项可以是:application, session, request 和 page。

Param

      被用来指定创造器的其他参数,每种构造器各有不同

属性:

include 和 exclude 元素

          允许一个创造器去限制进入类的方法。一个创造器必须指定 include 列表或 exclude 列表之一。如果是 include 列表则暗示默认的访问策略是"拒绝",include 中的每个方法就是允许访问的方法;如果是 exclude 列表则暗示默认的访问策略是"允许",exclude 中的每个方法就是拒绝访问的方法

Converter转换器:

你不需要在 dwr.xml 中<allow>部分的<convert>中定义。它们默认支持。

所有主要的类型,boolean, int , double 等等。

包装类,Boolean, Integer 等等。

java.lang.String  java.util.Date 和 java.sql.Times,java.sql.Timestamp。

数组(存放以上类型的)

集合类型 (List, Set, Map, Iterator 等等) (存放以上类型的)

DOM 对象(来自于 DOM, XOM, JDOM 和 DOM4J)

Bean和对象转换器:

BeanConverter 和 JavaBeans 规范

           用于被 BeanConverter 转换的 Bean 必须符合 JavaBeans 的规范,有 getter 和 setter,setter 有一个参数,并且这个 参数的类型是 getter 的返回类型。setter 应该返回 void,getter 应该没有任何参数。setter 没有重载。 以上这些属于常识。就在 eclipse 里自动为每个属性添加 setter,getter 那种类型,如果你用的不是 JavaBean,那么你应该用 ObjectConverter.

<signatures>标签 :

DWR 使用反射机制在转换过程中找到它应该使用的类型。有时候类型的信息无法获得,在这种情况下你要 在此处用方法签名给予暗示。

回调处理:

简单的回调函数

       Remote.getData(…,回调函数)

使用缩减格式

       Remote.getData (…,function(str){alert(str);})

调用元数据对象

Remote.getData(…, {

callback:function(str) { alert(str); }

});

 

常用选项索引:

Timeout 

          设定超时时长,单位 ms

errorHandler 

           当出了什么问题时的动作

 

Callback  

          调用成功以后的要执行的回调函数,应该只有一个参数:远程 调用得到的数据

 

exceptionHandler

          远程调用失败的动作,一般是服务端异常或者数据转换问题。

 

AJAX历史:

Ajax 并不是一项新的技术,由dhtml css js xmlhttprequest 技术集成 ,该 项技术应用最早见于对新浪、搜狐等大网站上新闻、天气信息的抓取,主要就是我们说的新闻小偷,主要使用xmlhttprequest的数据读取功能。

AJAX前景非常乐观,可以提高系统性能,优化用户界面。方便与现有技术结合 ,实现RIA(富客户)功能。

   ria   rich Internet apllication

          extjs   

          flex

          silverlight

xmlhttpreqeust 在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由Outlook Web Access小组写成。该组件原属于微软Exchange Server,并且迅速地成为了Internet Explorer 4.0[3]的一部分。部分观察家认为,Outlook Web Access是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。

Google在它著名的交互应用程序中使用了异步通讯,如Google讨论组、Google地图、Gmail等。Ajax这个词由《Ajax: A New Approach to Web Applications》(作者:Jesse James Garrett)一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为易用。

Ajax概述
:

Ajax: 异步JavaScript和XML

特点:异步、JavaScript、XML

借助异步JavaScript实现浏览器与服务器之间的异步交互,无需重载整个页面,解析和处理XML文档

 

Ajax相关技术:

1、JavaScript    

2、XHTML可扩展的超文本标记语言 (HTML):是HTML向XML过渡语言。

3、CSS (层叠样式表)

4、DOM (文档对象模型)

5、XML (可扩展标记语言)extensible markup language 

6、XSTL (可扩展的样式表转换语言)

7、XMLHttpRequest

 

dtd   schema                   .dtd             .xsd

<books>

     <book>

       <name>jsp</name>

      <author>张三</author>

   </book>

</books>

--------------------------

<书籍>

    <书>

    </书>

</书籍>

 

XMLHttpRequest对象:

XMLHttpRequest对象是当今所有AJAX和Web 2.0应用程序的技术基础。尽管软件经销商和开源社团现在都在提供各种AJAX框架以进一步简化XMLHttpRequest对象的使用;但是,我们仍然很有必要理解这个对象的详细工作机制。

       jquery (js)

       extjs (ui)         

      dwr

     javascript  css   跨浏览器

属性:

onreadystatechange*指定当readyState属性改变时的事件处理句柄。只写

readyState 返回当前请求的状态,只读.

responseBody 将回应信息正文以unsigned byte数组形式返回.只读

responseStream以Ado Stream对象的形式返回响应信息。只读

responseText将响应信息作为字符串返回.只读responseXML将响应信息格式化为Xml Document对象并返回,只读

status返回当前请求的http状态码.只读

statusText 返回当前请求的响应行状态,只读

onreadystatechange:

指定当readyState属性改变时的事件处理句柄

语法:

    oXMLHttpRequest.onreadystatechange = funcMyHandler;

   说明:

   oXMLHttpRequest是XMLHttpRequest 对象

   funcMyHandler是用户自定义的处理函数

readyState:

返回XMLHTTP请求的当前状态

语法

       lValue = oXMLHttpRequest.readyState;

变量,此属性只读,状态用长度为4的整型表示.定义如下:

0 (未初始化)对象已建立,但是尚未初始化(尚未调用open方法)

1 (初始化)对象已建立,尚未调用send方法

2 (发送数据)send方法已调用,但是当前的状态及http头未知

3 (数据传送中)已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,

4 (完成)数据接收完毕,此时可以通过responseBody和responseText获取完整的回应数据

status :

返回当前请求的http状态码

语法

      lValue = oXMLHttpRequest.status;

常见状态码:

  200    OK

  404    Not Found

方法:

abort取消当前请求

getAllResponseHeaders获取响应的所有http头

getResponseHeader从响应信息中获取指定的http头

open创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码)

send发送请求到http服务器并接收回应

setRequestHeader单独指定请求的某个http头

open :

创建一个新的http请求,并指定此请求的方法、URL以及验证信息

语法:

           oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);

参数:

     1、bstrMethod
http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。

     2、bstrUrl
请求的URL地址,可以为绝对地址也可以为相对地址。

     3、varAsync[可选]
布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。

     4、bstrUser[可选]
如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。

     5、bstrPassword[可选]
验证信息中的密码部分,如果用户名为空,则此值将被忽略。

send :

发送请求到http服务器并接收回应

语法

         oXMLHttpRequest.send(varBody);

          (varBody 欲通过此请求发送的数据。 )

posted @ 2012-12-03 16:58  乡间小路上  阅读(254)  评论(0编辑  收藏  举报