`

【转】DWR框架实现Ajax

 
阅读更多

DWR框架实现Ajax

      Ajax是时下比较流行的一种web界面设计新思路,其核心思想是从浏览器获取XMLHttp对象与服务器端进行交互. DWR(Direct Web Remoting)就是实现了这种Ajax技术的一种web框架. 最近做的项目中我也将它用上了,感觉很是方便,比如动态生成javascript代码,隐藏的http协议,java代码和javascript交互的是javascript的对象(或字符串).  下面是我整理的文档.
  DWR主要由两部门组成。javascript与web服务器通信并更新web页;运行在web服务器的Servlet处理请求并把响应发回浏览器。

   1  .  配置web.xml
<servlet> 
  <servlet-name>dwr-invoker</servlet-name> 
  <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
  <servlet-name>dwr-invoker</servlet-name> 
  <url-pattern>/dwr/*</url-pattern> 
</servlet-mapping>

  2    当我们想看dwr自动生成的测试页时,可在java代码
servlet中加 
<init-param> 
  <param-name>debug</param-name> 
  <param-value>true</param-value> 
</init-param>

这个参数DWR默认是false.如果选择true.我们可以通过url http://localhost:port/app/dwr ,你就可以看到你部署的每个DWR class。并且可以测试java代码的每个方法是否运行正常。为了安全考虑,在正式环境下你一定把这个参数设为false.

3  log信息配置

我喜欢用log4j输出日志,那么在log4j.properties下加,log4j.logger.uk.ltd.getahead.dwr = debug。这样可以看DWR的调试日志。 

4  配置dwr.xml (和web.xml同目录)
  
<create creator="new" javascript="JDate"> 
<param name="class" value="java.util.Date"/> 
</create>

这里的多数元素都是可选的 - 你真正必须知道的是指定一个creator和一个javascript名字。

creator属性 是必须的 - 它用来指定使用那种创造器。

默认情况下DWR1.1有8种创造器。它们是:

  • new: 用Java的new关键字创造对象。
  • none: 它不创建对象,看下面的原因。 (v1.1+)
  • scripted: 通过BSF使用脚本语言创建对象,例如BeanShell或Groovy。
  • spring: 通过Spring框架访问Bean。
  • jsf: 使用JSF的Bean。 (v1.1+)
  • struts: 使用Struts的FormBean。 (v1.1+)
  • pageflow: 访问Beehive或Weblogic的PageFlow。 (v1.1+)

javascript属性 用于指定浏览器中这个被创造出来的对象的名字。你不能使用Javascript的关键字。

scope属性 非常类似servlet规范中的scope。 它允许你指定这个bean在什么生命范围。选项有"application", "session", "request" 和"page"。这些值对于Servlet和JSP开发者来说应该相当熟悉了。

scope属性是可选的。默认是"page"。如果要使用"session"需要cookies。当前的DWR不支持ULR重写。

param元素 被用来指定创造器的其他参数,每种构造器各有不同。例如,"new"创造器需要知道要创建的对象类型是什么。每一个创造器的参数在各自的文档中能找到。请查看上面的链接。

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


5 dwr.jar下载后放lib下

源码浅析

dwr的设计很象webwork2的设计,隐藏http协议,扩展性,兼容性及强。

通过研究uk.ltd.getahead.dwr.DWRServlet这个servlet来研究下dwr到底是如何工作的。

<servlet> 
  <servlet-name>dwr-invoker</servlet-name> 
  <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
  <servlet-name>dwr-invoker</servlet-name> 
  <url-pattern>/dwr/*</url-pattern> 
</servlet-mapping>

这样/dwr/*下的所有的请求都是由这个servlet来处理,到底生理了什么呢,我们还是以例子来说明吧.

1 web服务器启动,DWRServlet init()方法调用,init主要做了以下工作。 
设置日志级别、实例化DWR用到的单例类(这些类在jvm中只有一个实例对象)、读去配置文件(包括dwr.jar包中的dwr.xml,WEB-INF/dwr.xml. config*.xml)。
2 请求处理
DWRServlet.doGet, doPost方法都调用processor.handle(req, resp)方法处理。Processor对象在init()方法中已经初始化了。 

代码
public void handle(HttpServletRequest req, HttpServletResponse resp)   
        throws IOException   
    {   
        String pathinfo = req.getPathInfo();   
        if(pathinfo == null || pathinfo.length() == 0 || pathinfo.equals("/"))   
        {   
            resp.sendRedirect(req.getContextPath() + req.getServletPath() + '/' + "index.html");   
        } else  
        if(pathinfo != null && pathinfo.equalsIgnoreCase("/index.html"))   
        {   
            doIndex(req, resp);   
        } else  
        if(pathinfo != null && pathinfo.startsWith("/test/"))   
        {   
            doTest(req, resp);   
        } else  
        if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js"))   
        {   
            doFile(resp, "engine.js", "text/javascript");   
        } else  
        if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js"))   
        {   
            doFile(resp, "util.js", "text/javascript");   
        } else  
        if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js"))   
        {   
            doFile(resp, "deprecated.js", "text/javascript");   
        } else  
        if(pathinfo != null && pathinfo.startsWith("/interface/"))   
        {   
            doInterface(req, resp);   
        } else  
        if(pathinfo != null && pathinfo.startsWith("/exec"))   
        {   
            doExec(req, resp);   
        } else  
        {   
            log.warn("Page not found. In debug/test mode try viewing /[WEB-APP]/dwr/");   
            resp.sendError(404);   
        }   
    }  

dwr/*处理的请求也就这几种。

(1)dwr/index.html,dwr/test/这种只能在debug模式下使用,调试用。 
dwr/engine.js,dwr/util.js,dwr/deprecated.js当这个请求到达,从dwr.jar包中读取文件流,响应回去。(重复请求有缓存) 
(2)当dwr/interface/这种请求到来,(例如我们在index.html中的 <script type='text/javascript' src='dwr/interface/JDate.js'></script>)DWR做一件伟大的事。把我们在WEB-INF/dwr.xml中的 
<create creator="new" javascript="JDate"> 
<param name="class" value="java.util.Date"/> 
</create> 
java.util.Date转化为javascript函数。 
http://localhost:port/simpledwr/dwr/interface/JDate.js看看吧。 
细节也比较简单,通过java反射,把方法都写成javascript特定的方法。(我觉得这些转换可以放到缓存里,下次调用没必要再生成一遍,不知道作者为什么没这样做)。 
(3)dwr/exec 
javascript调用方法时发送这种请求,可能是XMLHttpRequest或IFrame发送。 
当然,javascript调用的方法签名与java代码一致,包括参数,还有javascript的回调方法也传到了服务器端,在服务器端很容易实现。回调方法的java的执行结果 返回类似 <script>callMethod(结果)<script>的javascript字符串,在浏览器执行。哈,一切就这么简单,巧妙。

我这里还有DWR中文文档. http://www.blogjava.net/Files/LiuTing/DWR中文文档.rar

 

原文来自:http://www.blogjava.net/liuting/archive/2007/05/20/118675.html

分享到:
评论

相关推荐

    java+dwr框架实现聊天室

    Java+dwr框架实现聊天室是使用Java语言和dwr框架实现的服务器推技术,实现了实时通信的聊天室功能。下面将详细介绍该技术的实现过程和相关知识点。 一、dwr 框架简介 dwr(Direct Web Remoting)是一种基于Ajax...

    ajax dwr 框架实现二级联动下拉列表源码

    总结来说,利用Ajax和DWR框架实现的二级联动下拉列表,使得用户可以在不刷新页面的情况下完成多级选择,提升了用户体验。同时,DWR的使用简化了前后端交互的复杂性,使得开发更为高效。通过阅读和理解提供的源代码,...

    java 采用dwr框架构实现ajax

    Java 使用 Direct Web ...综上所述,Java借助DWR框架实现Ajax通信,能够提高Web应用的响应速度和用户体验,降低了开发复杂性。在实际项目中,结合DWR提供的各种功能和优化手段,可以构建出高效、安全的Web应用。

    DWR框架DWR框架

    例如,在压缩包内的文件"A051]使用DWR开发AJAX+For+J2EE.wrf"可能是一个演示或者教程,详细介绍了如何使用DWR框架在J2EE环境中构建AJAX应用。这个文件可能涵盖从安装DWR,配置web.xml,编写可远程调用的Java类,到在...

    DWR框架 结合ajax技术 动态刷新技术,结合网页聊天室

    动态刷新技术,结合网页聊天室,DWR框架 结合ajax技术

    dwr框架(Ajax)(jsp)

    DWR会自动处理这些交互,无需开发者关心底层的Ajax实现。 6. **资源包**: 提供的资源包可能包含DWR的jar文件,示例代码,以及如何集成DWR到JSP项目的指南。这些资源对于学习和快速上手DWR非常有用。 7. **学习...

    Ajax技术及其DWR框架实现

    ### Ajax技术及其DWR框架实现 #### 一、引言 随着互联网技术的快速发展,Web应用的需求日益增加,用户体验成为了衡量Web应用优劣的重要标准之一。传统的Web应用往往过于注重后端逻辑处理,忽视了前端体验的重要性...

    AJAX 与 DWR框架

    相比之下,Ajax实现了部分刷新,仅获取并更新需要变动的数据,提高用户体验。Ajax通过XHR对象实现异步通信,这意味着用户可以在等待服务器响应的同时继续其他操作。另外,虽然传统的IFRAME也能实现异步通信,但Ajax...

    AJAX技术之DWR框架入门

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

    dwr框架的使用简介

    本文通过一个具体的示例——无限级树型菜单的实现,展示了如何使用DWR框架简化AJAX应用的开发过程。该示例主要涉及以下几个步骤: 1. **服务器端Java类设计**:首先需要定义服务器端的Java类,这些类包含了将被...

    AJAX DWR框架实现部分刷新效果

    DWR(Direct Web Remoting)是一个开源Java框架,它简化了AJAX在Java应用程序中的应用。DWR使得JavaScript和Java之间可以直接通信,就像它们是同一语言一样,消除了传统AJAX需要通过XML或JSON进行数据交换的复杂性。...

    dwr框架实现无刷新分页

    **一、DWR框架基础** 1. **DWR的核心概念:** - **AJAX(Asynchronous JavaScript and XML)**:DWR是基于AJAX技术实现的,通过异步方式与服务器通信,无需刷新整个页面。 - **Cascading Style Sheets (CSS)和...

    DWR AJAX框架(包含使用教程)

    1. **DWR框架基础** DWR的核心概念是反向Ajax,它创建了一种机制,使得JavaScript可以直接调用服务器端的Java方法,就像它们是本地函数一样。这样,开发者可以轻松地将服务器端的功能暴露给前端,而无需手动处理...

    Ajax的dwr框架实现级联

    在本项目中,我们将讨论如何利用DWR框架来实现级联效果,即一个下拉框的选项改变会影响到另一个下拉框的显示内容。 级联通常用于数据表单中,如地区选择,省份改变时城市会随之更新,城市改变时区县也会相应变化。...

    DWR框架学习demo

    **DWR(Direct Web Remoting)框架学习指南** ...通过学习和实践DWR框架,开发者可以创建更加动态、响应式的Web应用,提升用户的交互体验。理解DWR的工作原理以及如何配置和使用,对于开发人员来说是非常有价值的技能。

    AJAX框架DWR简单应用

    在提供的“AJAX框架DWR简单应用.pdf”文件中,你可能会找到关于如何设置DWR环境、编写Java接口、配置DWR配置文件、在前端JavaScript中使用DWR,以及示例代码和实际运行效果的详细教程。这个文件是学习和理解DWR工作...

    AJAX_DWR框架

    **AJAX_DWR框架详解** AJAX (Asynchronous JavaScript and XML) 和 DWR (Direct Web Remoting) 是两种在Web开发中广泛使用的技术,它们共同构成了一个强大的框架,用于构建高度交互性和动态的Web应用程序。AJAX允许...

    SSH框架+Ajax(运用dwr框架)综合实例

    在这个例子中,DWR框架用于实现Ajax通信。以下是整合步骤: 1. **配置DWR**:首先,需要在Web工程中添加DWR的相关库,并在web.xml中配置DWR的ContextListener和Servlet。 2. **创建Java服务端接口**:定义一个Java...

    Ajax资料,DWR框架资料

    学习和理解Ajax及DWR框架,可以帮助开发者构建更加高效、互动性强的Web应用,提升用户在浏览网页时的体验。无论是前端的JavaScript编程,还是后端的Java服务,DWR都提供了强大的工具来简化这个过程。对于希望深入...

    基于DWR框架的教学管理系统设计与实现.pdf

    "基于DWR框架的教学管理系统设计与实现" 本文主要介绍了基于DWR框架的教学管理系统...6. AJAX客户端的实现:在DWR框架中,需要实现AJAX客户端,可以调用 ProfessionDAO 对象的公有方法,实现选课系统的异步数据交换。

Global site tag (gtag.js) - Google Analytics