文档库 最新最全的文档下载
当前位置:文档库 › 在J2EE Web应用项目中如何应用DWR框架相关技术的应用示例

在J2EE Web应用项目中如何应用DWR框架相关技术的应用示例

在J2EE Web应用项目中如何应用DWR框架相关技术的应用示例
在J2EE Web应用项目中如何应用DWR框架相关技术的应用示例

1.1在J2EE Web应用项目中如何应用DWR框架相关技术的应用示例

1.1.1DWR框架和AJAX在技术实现方面的本质差别

1、开发人员在应用AJAX技术时所面临的技术实现的难度

(1)J2EE Web应用系统的开发人员在应用AJAX相关技术时必须要对各种Web前台开发技术非常了解和熟练地应用

因为在Ajax中主要包含有如下的各种关键技术,而这些技术在应用中都存在有一定的复杂性和技术实现的难度。

1)使用XHTML和CSS标准化呈现;

2)使用DOM实现动态显示和交互, 当需要在JavaScript 代码和服务器之间传递

XML 和改变HTML 表单的时候,我们需要DOM技术;

3)使用XML和XSLT进行数据交换与处理;

4)使用XMLHttpRequest进行异步数据读取;

5)最后用JavaScript绑定和处理所有数据;

这对于一个普通的Java程序员来说,这种要求是有点过分了!如何使普通的Java程序员能够快速地进行基于AJAX应用技术的J2EE Web应用项目的开发实现呢?那么就要求开发人员使用一些基于AJAX技术的应用框架,来屏蔽或者简化各种Web前台开发技术。(2)详细学习Ajax 时的“低级”编码并不是那么容易

所有 Ajax 代码都使用了现代浏览器(包括最新版的 Internet Explorer and Firefox)

的一个内置对象,叫做XMLHttpRequest。

JavaScript 代码可通过该对象异步地调用服务器,但由于不同的浏览器以稍微不同的方式实现XMLHttpRequest对象。而且同一版本的浏览器(例如 Internet Explorer)的更复杂的混合、不同版本实现该对象的方式不同。

再加上 JavaScript程序代码本身通常对于不同的浏览器和版本是不同的,因此不方便应用和编程处理。

(3)XML 请求和响应在客户端浏览器和服务器后端之间传输的标准化问题由于缺乏关于数据应该如何通过 XML 请求和响应在浏览器代码和服务器后端之间传输的标准化,因而事情更加复杂。

特别是类似于跨浏览器的DOM编程实现的兼容性这样的问题。这将会导致在编码和调试Javascript代码上面花费数不清的时间,这显然对开发者来说很不友好。

(4)在JavaScript程序代码中直接使用XmlHttpRequest创建异步请求非常麻烦我们的JavaScript代码不仅冗长,而且还必须考虑如何获得服务器端的返回结果。

http_request.onreadystatechange = alertContentsFun;

function alertContentsFun()

{

if (http_request.readyState == 4)

{

if (http_request.status == 200)

{

alert(http_request.responseText);

}

else

{

alert("There was a problem with the request.");

}

}

}

而目前在Java平台中比较好的AJAX框架,应该属Direct Web Remoting框架。

(1)DWR框架项目是在Apache许可下的一个开源的解决方案

DWR(直接Web远程控制)是 Joe Walker 和 Mark Goodwin 开发的,并且该项目是在Apache许可下的一个开源的解决方案,它供给那些想要以一种简单的方式使用Ajax和XMLHttpRequest的开发者。

它具有一套Javascript功能集,它们把从HTML页面调用应用服务器上的Java对象的方法简化了。它操控不同类型的参数,并同时保持了HTML代码的可读性-----它可以允许在JavaScript中直接访问服务器端的JavaBean中的方法。

(2)使用DWR框架非常像传统的RPC机制

由于在DWR框架中采用了一种“新方法”来动态生成基于JAVA程序类的JavaScript 程序代码,这样将J2EE Web开发人员就可以在JavaScript程序中直接使用Java程序代码-----就像它们是浏览器的本地客户端的程序代码一样。

但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器端的各种的资源。当然,出于安全的原因,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用。

这个从JAVA到JavaScript的远程功能方法给DWR的用户带来非常像传统的RPC机制,就像RMI或者SOAP一样,而且拥有运行在WEB上但是不需要浏览器插件的好处。

(3)设计DWR框架的主要目的

1)它是一个Java应用框架,可以很轻松地将它插入到Web应用程序中,以便

JavaScript程序代码可以直接调用Web服务器端的JavaBean组件中的相关功能服

务方法----也就是允许直接在JavaScript的脚本中对服务器端的JavaBean中的方

法进行调用。

2)它可以直接与Spring 框架进行集成,从而允许Web用户直接向Web客户端浏览器

公开JavaBean程序中的方法。

3)DWR框架真正的巧妙之处是,在用户配置了要向客户端浏览器公开的功能服务方法

之后,它使用反射技术来生成JavaScript程序对象,以便J2EE 的JSP Web页面

能够使用这些对象来访问该服务。然后JSP Web页面只需应用所生成的JavaScript

程序对象,就像它们是直接使用本地服务一样;DWR框架能够无缝地处理所有有关

Ajax实现技术和请求定位等方面的琐碎技术实现细节。

(4)在应用DWR框架时所需要的应用环境

DWR需要JDK1.3以上的版本,一个支持2.2标准版本以上的Servlet引擎。测试过的环境包括:Tomcat、Weblogic、Websphere、JBoss、Jetty 、Resin 、Sun ONE等J2EE应用服务器环境。

3、DWR框架的工作原理

DWR框架是基于Java类动态地创建和生成对应的JavaScript程序代码,下图展示了DWR 如何简化Ajax 编程。

(1)DWR框架的工作原理示例图

在下面的图中,服务器端 Java Employee对象(Plain Old Java Object 或者 POJO)被远程化---- JavaScript 代码可以直接访问服务器端中的Employee对象,就像它们是

本地 JavaScript 对象一样。

由于JavaBean对象被远程化了----将服务器端的某个JavaBean组件(可以为业务组件或者业务实体组件)转换为JavaScript中对象,所以该数据是自动变得对运行在客户机浏览器上的 JavaScript 代码可用。

在幕后,DWR 通过浏览器提供的XMLHttpRequest对象向其自己的运行在应用服务器上的后台组件发出异步调用。

该 Servlet 访问服务器端Employee对象,并通过格式化为 JavaScript Object Notation (JSON) 格式的 HTTP 响应发送回所需的数据-----DWR接着处理了JAVA和JavaScript之间的所有远程信息,包括转换所有的参数和返回需要的值-----因此,DWR无缝地处理所有有关Ajax和请求定位的琐碎细节。

(2)DWR 框架是一个引擎以帮助J2EE Web开发人员简化对AJAX应用技术的应用复杂性

可以把J2EE Web服务器端 Java 程序对象的方法直接公开给客户端的JavaScript 程序代码调用,从而可以有效地从应用程序代码中把 Ajax 的全部请求-响应循环消除掉。

这意味着客户端代码再也不需要直接处理 XMLHttpRequest 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成 XML。甚至不再需要编写 Servlet 代码把 Ajax 请求调整成对 Java 域对象的调用。

4、在应用DWR框架技术的主要优点

DWR是一种AJAX(Asynchronous JavaScript and XML)的JAVA实现,它提供了一种能在Web浏览器端采用JavaScript语言直接调用后台业务商业组件的解决方案。同时能够动态生成JavaScript代码和隐藏HTTP协议的细节。

(1)DWR通过JavaScript直接调用远程组件可以减少Web开发的时间

这特别对于那些具有和用户频繁交互的Web应用程序----DWR使得浏览器不用刷新页面就可以从远程Web服务器取得用户需的数据(本质为AJAX技术),这种无刷新页面的交互方式大大提高Web页面的响应时间。

(2)具有良好的浏览器的兼容性

DWR采用浏览器端的纯JavaScript实现,并且会自动根据浏览器类型采用最高效率的远程组件调用机制。

(3)彻底分离表现和业务逻辑,减少了在页面中的JavaScript脚本代码。

5、DWR 框架中的两个主要的功能组件

(1)DWR 中的dwr.jar系统库中包括两个方面的组件

1)一个运行在用户浏览器上的JavaScript 库(如utils.js 和 engine.js等)

DWR提供了帮助执行常见的用户界面任务的 JavaScript 工具函数。

2)另一个运行在应用服务器上的Servlet----所以把它的定义添加到web.xml(注意:不同版本的DWR是不同的)。

DWR1.1版:uk.ltd.getahead.dwr.DWRServlet

DWR2.0版:org.directwebremoting.servlet.DwrServlet

(2)uk.ltd.getahead.dwr.DWRServlet组件

uk.ltd.getahead.dwr.DWRServlet组件有如下的主要作用——首先,对于公开的每个JavaBean组件类,DWR 会动态地生成包含在 Web 页面中的 JavaScript函数以及对应的存根函数----它们实现在幕后执行 XMLHttpRequest;其次,就是把页面中的异步请求转换成对服务器端上的JavaBean组件的方法调用,并把方法的调用返回值放在该Servlet 响应中发送回客户端;最后将返回的结果编码成 JavaScript的表示。

(3)主要的JavaScript库文件(*.js文件)

1)engine.js

2)util.js

(4)在JavaScript程序中使用DWR框架的JavaScript系统库的主要方法及代码示例<%

String webContext=request.getContextPath();

%>

6、DWR框架的主要实现机制及各个功能组件的职责

(1)DWR框架主要组成部分

(2)DWR前台引擎(Engine.js)的主要职责

1)截取每个后台组件的请求实现客户端的统一入口,将用于组件调用的JS参数对象

重新包装组合;

2)检测客户端浏览器的环境并选择最佳的数据提交方案,处理后台执行结果并通过执

行回调函数通知客户

(3)后台控制器(DWRServet)的主要职责

1)装载Servlet时初始化DWR配置参数,实现后台业务组件调用的Web服务器端统

一的入口

2)分发各种不同类型的请求——如JS文件请求和业务调用请求等

3)输出组件执行结果(JavaScript语句)到客户端浏览器

(4)业务组件执行器的主要职责

1)根据配置文件的参数确定后台组件的访问规则和生命周期

2)拆包由前台页面中的JavaScript所传入的参数并且包装后端服务器组件的执行结果

3)按参数类型匹配数据类型转换器,并采用反射机制执行业务组件的对应方法以处理

客户端的请求

4)处理与其他系统的接口和协作如:Spring Hibernate等

(5)数据类型转换器的主要职责

1)将一系列单个的参数转换成对应的Java对象

2)将Java对象转换成JavaScript对象

相关文档