`
gdzhljw
  • 浏览: 97982 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论
阅读更多

DWR学习

隐藏的http协议;javascript于java代码交互的是javascript对象(或字符串)等.?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app >
<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>
</web-app>








dwr.xml 与web.xml同目录
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="JDate">
<param value="java.util.Date"/>
</create>
</allow>
</dwr>








index.html
<html>
<head>
<title>DWR - Test Home</title>
<script type='text/javascript' ></script>
<script type='text/javascript' ></script>
<script>
function init(){
JDate.getYear(load);
}
function load(data){
alert(data+1900+'年')
}
</script>
</head>
<body >
</body>
</html>
















 

  • <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()方法中已经初始化了。
      代码
      1. public void handle(HttpServletRequest req, HttpServletResponse resp)   
      2.         throws IOException   
      3.     {   
      4.         String pathinfo = req.getPathInfo();   
      5.         if(pathinfo == null || pathinfo.length() == 0 || pathinfo.equals("/"))   
      6.         {   
      7.             resp.sendRedirect(req.getContextPath() + req.getServletPath() + '/' + "index.html");   
      8.         } else  
      9.         if(pathinfo != null && pathinfo.equalsIgnoreCase("/index.html"))   
      10.         {   
      11.             doIndex(req, resp);   
      12.         } else  
      13.         if(pathinfo != null && pathinfo.startsWith("/test/"))   
      14.         {   
      15.             doTest(req, resp);   
      16.         } else  
      17.         if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js"))   
      18.         {   
      19.             doFile(resp, "engine.js""text/javascript");   
      20.         } else  
      21.         if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js"))   
      22.         {   
      23.             doFile(resp, "util.js""text/javascript");   
      24.         } else  
      25.         if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js"))   
      26.         {   
      27.             doFile(resp, "deprecated.js""text/javascript");   
      28.         } else  
      29.         if(pathinfo != null && pathinfo.startsWith("/interface/"))   
      30.         {   
      31.             doInterface(req, resp);   
      32.         } else  
      33.         if(pathinfo != null && pathinfo.startsWith("/exec"))   
      34.         {   
      35.             doExec(req, resp);   
      36.         } else  
      37.         {   
      38.             log.warn("Page not found. In debug/test mode try viewing /[WEB-APP]/dwr/");   
      39.             resp.sendError(404);   
      40.         }   
      41.     }  

      哦。这些恍然大悟。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' ></script>)DWR做一件伟大的事。把我们在WEB-INF/dwr.xml中的
      <create creator="new" javascript="JDate">
      <param value="java.util.Date"/>
      </create>script>callMethod(结果)<script>的javascript字符串,在浏览器执行。哈,一切就这么简单,巧妙。

      dwr的设计构思很是巧妙。
      第一、把java类转化为javascript类由dwr自动完成,只需简单的配置。
      第二、应用起来极其简单。开发者不要该服务器代码就可以集成。
      第三、容易测试。和webwork一样,隐藏的http协议。
      第四、及强扩展性。例如与spring集成,只需修改一点代码。
      第五、性能。就我与jason,等简单比较,dwr性能可能是最好的。
      第六、自动把java对象转化为javascript对象,并且及易扩展。[/code]





      simpledwr.rar
       描述:  最简单的一个例子.
      下载
       文件名:  simpledwr.rar
       文件大小:  137 KB
       下载过的:  文件被下载或查看 1327 次
      howitworks.png
       描述:  
       文件大小:  31 KB
       看过的:  文件被下载或查看 1122 次

      howitworks.png
      下载


       

      不断补存中,以后可能会写点.
      1 dwr支持的java类型于javascript类型如何转化.
      2 dwr配置说明.
      3 于spring,struts,webwork的集成.
      4 dwr是如何解决我的那些疑问的.
      http://forum.iteye.com/viewtopic.php?t=14083
      5 见 http://forum.iteye.com/viewtopic.php?t=13995.现在我自己倾向于用javascript代替xml.毕竟浏览器消费最好是javascript对象.
      6






      1、最小配置

      代码
      1. <servlet>  
      2.   <servlet-name>dwr-invoker</servlet-name>  
      3.   <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>  
      4. </servlet>  
      5. <servlet-mapping>  
      6.   <servlet-name>dwr-invoker</servlet-name>  
      7.   <url-pattern>/dwr/*</url-pattern>  
      8. </servlet-mapping>  


      2、当我们想看DWR自动生成的测试页(Using debug/test mode)时,可在

      代码
      1. servlet中加   
      2. <init-param>  
      3.   <param-name>debug</param-name>  
      4.   <param-value>true</param-value>  
      5. </init-param>  

      init-param>  














  •  <param-name>logLevel</param-name>  
  •  <param-value>DEBUG</param-value>  
  • </init-param>  

      有效的值是 FATAL, ERROR, WARN (the default), INFO and DEBUG

      我是喜欢用log4j输出日志,那么在log4j.properties下加,log4j.logger.uk.ltd.getahead.dwr = debug。这样可以看DWR的调试日志。
      4、多dwr.xml文件的配置
      可能有几种情况,我们一一列举。 一个servlet,多个dwr.xml配置文件;多个servlet,每个servlet对应一个或多个dwr.xml.
      一个servlet,多个dwr.xml配置文件;



      代码
      1. <servlet>  
      2.     <servlet-name>dwr-invoker</servlet-name>  
      3.     <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>    
      4.     <init-param>  
      5.       <param-name>config-1</param-name>  
      6.       <param-value>WEB-INF/dwr1.xml</param-value>  
      7.     </init-param>  
      8.     <init-param>  
      9.       <param-name>config-2</param-name>  
      10.       <param-value>WEB-INF/dwr2.xml</param-value>  
      11.     </init-param>  
      12. </servlet>  

      在这种配置下,param-name的值必须以config开头。param-name可以有>=0个。如果没有param-name,那么将会读取WEB-INF/dwr.xml。如果有大于零个param-name,那么WEB-INF/dwr.xml文件将不会被读取。

      多个servlet,每个servlet对应一个或多个dwr.xml

      代码
      1. <servlet>  
      2.    <servlet-name>dwr-invoker</servlet-name>  
      3.     <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>    
      4. <!--用classes/dwr.xml-->  
      5. </servlet>  
      6. <servlet>  
      7.    <servlet-name>dwr-invoker1</servlet-name>  
      8.    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>    
      9.    <init-param>  
      10.      <param-name>config-admin</param-name>  
      11.      <param-value>WEB-INF/dwr1.xml</param-value>  
      12.    </init-param>  
      13.    <init-param>  
      14.      <param-name>debug</param-name>  
      15.      <param-value>true</param-value>  
      16.    </init-param>  
      17. </servlet>  
      18. <servlet-mapping>  
      19.    <servlet-name>dwr-invoker</servlet-name>  
      20.    <url-pattern>/dwr/*</url-pattern>  
      21. </servlet-mapping>  
      22. <servlet-mapping>  
      23.    <servlet-name>dwr-invoker1</servlet-name>  
      24.    <url-pattern>/dwr1/*</url-pattern>  
      25. </servlet-mapping>  

      在这种情况下,我们可以根据J2EE security来控制权限,针对不同url,加不同的角色。
      5、dwr的几个扩展点(Plug-ins)
      DWR对以下接口提供的默认的实现,用户可以继承DWR的默认实现类来达到我们想要的效果。但这至少需要我们读了DWR源码才能做这些工作(dwr源码很是清晰,有兴趣可以学习一下),以后可能补存这部分。


      代码
      1. uk.ltd.getahead.dwr.AccessControl       
      2. uk.ltd.getahead.dwr.Configuration    
      3. uk.ltd.getahead.dwr.ConverterManager    
      4. uk.ltd.getahead.dwr.CreatorManager    
      5. uk.ltd.getahead.dwr.Processor    
      6. uk.ltd.getahead.dwr.ExecutionContext   

       

      load为回掉函数名.
      http://localhost:port/simpledwr/dwr/interface/JDate.js

      打开这个连接看看.

      谢谢大家支持.
      后续我努力继续下去.本来写好dwr.xml配置,但在读dwr源码过程中,发现dwr的很多不足,也可以说是java语言 到 javascript语言 根本区别造成的问题. 正在考虑中.

       http://www-128.ibm.com/developerworks/cn/java/j-ajax3/

    分享到:
    评论

    相关推荐

      DWR学习资料

      DWR学习资料 :DWR 3.0 上传文件.txt DWR3.0反向Ajax示例.txt DWR3.0学习笔记.txt DWR3.0学习网址.txt dwr分页.doc DWR分页代码.doc DWR中文文档.doc DWR中文文档.pdf dwr做comet的完整实现.doc Spring整合DWR comet ...

      DWR的学习资料,DWR学习必备

      总的来说,这个压缩包提供了一个全面的学习DWR的资源集合,从理论知识到实践案例,覆盖了DWR的方方面面。通过深入研究这些材料,你不仅可以了解DWR的工作机制,还能学会如何在实际项目中有效地应用它,提升Web应用的...

      dwr学习教程3

      【DWR学习教程3】是针对Direct Web Remoting (DWR)这一JavaScript和Java之间的通信框架的深入学习资料。DWR允许在Web浏览器和服务器之间进行实时、安全且高效的交互,使得前端JavaScript能够调用后端Java方法,极大...

      DWR 教程 中文API DWR.xml配置文件说明 DWR学习笔记

      首先,"DWR学习笔记"提供了对DWR基础概念、核心功能以及实际应用的概述。这些笔记可能包含了DWR的基本架构,如它如何通过AJAX技术实现实时的Web交互,以及如何创建和调用服务器端的Java方法。 "DWR中文API"是DWR库...

      dwr学习教程2

      【DWR学习教程2】是针对Direct Web Remoting(DWR)框架的深入学习资源,主要面向希望掌握或提升Web应用程序远程调用能力的开发者。DWR是一个开源Java库,它允许JavaScript在浏览器中直接调用服务器上的Java方法,...

      DWR学习案例详解(数据库)

      在这个DWR学习案例中,你可能会看到如何设置DWR环境,创建Java和JavaScript接口,以及如何进行数据库操作的示例。案例可能包括创建用户界面元素,如表格或表单,用于显示和编辑数据;编写服务器端的Java方法,处理...

      dwr入门 dwr学习资料

      本套DWR学习资料旨在帮助初学者快速掌握DWR的基本概念和使用技巧。通过实例和详细的说明,你可以系统地了解如何在实际项目中应用DWR。 1. **DWR的基本概念** - **反向AJAX**:DWR的核心技术之一,允许服务器主动推...

      DWR学习资料汇总(PDF)

      这个"**DWR学习资料汇总(PDF)**"压缩包显然是一个包含各种DWR学习资源的集合,旨在帮助开发者快速理解和掌握DWR技术。 DWR的核心功能是提供了一个安全且易于使用的接口,使得JavaScript可以直接调用服务器上的Java...

      DWR学习的各类文件

      在"DWR学习的各类文件"中,我们可能涵盖以下核心知识点: 1. **DWR的基本概念**:DWR的核心是它的反向Ajax机制,它允许JavaScript调用服务器端的Java方法,并将结果返回到客户端。这打破了传统的Web应用程序模型,...

      dwr学习实例 初学者的宝

      这个“dwr学习实例 初学者的宝”压缩包文件显然是为那些想要深入理解并实践DWR技术的新手准备的。DWR的主要目标是简化前端与后端的交互,使得动态更新网页变得更加便捷,无需刷新整个页面。 在DWR中,你可以创建一...

      DWR学习笔记及经验总结

      在“DWR学习笔记及经验总结”中,我们可以期待找到以下关键知识点: 1. **DWR的基本概念**:了解DWR的核心理念,包括远程方法调用(Remote Method Invocation)、反向Ajax以及它如何通过JSON或XML格式传递数据。 2...

      DWR学习笔记和与spring整合练习

      **DWR(Direct Web Remoting)**是一种JavaScript库,它允许Web...通过深入学习和实践"DWR学习笔记和与spring整合练习",开发者可以掌握DWR的精髓,熟练运用其与Spring的整合,打造出高效、安全、易维护的Web应用程序。

      基于JavaScript和Java的DWR学习示例设计源码

      该项目是基于JavaScript和Java的DWR学习示例设计源码,共包含33个文件,其中包括18个XML配置文件、3个JavaScript源文件、2个Java源文件、2个JSP页面文件、2个class字节码文件、2个lst列表文件、1个Markdown文档、1个...

      dwr学习笔记pdf文件

      ### dwr学习笔记pdf文件知识点概述 #### 一、DWR框架简介 - **DWR**(Direct Web Remoting)是由GetAhead公司开发的一款用于实现Ajax应用的框架。该框架的核心价值在于允许客户端JavaScript直接调用服务器端Java类...

      dwr学习笔记和总结

      ### dwr学习笔记和总结 #### 一、DWR简介 DWR (Direct Web Remoting) 是一个简化Ajax开发的框架,它使得JavaScript能够直接调用服务器端的Java方法成为可能,无需编写复杂的Ajax代码。这极大地提高了开发效率,并...

      dwr学习之基础篇

      《DWR学习之基础篇——深入理解Direct Web Remoting》 Direct Web Remoting(DWR)是一种开源JavaScript库,它允许在Web浏览器和Java服务器之间进行实时、双向通信,极大地简化了AJAX(Asynchronous JavaScript and...

      DWR学习笔记-HelloWorld篇

      【标题】:“DWR学习笔记-HelloWorld篇” 在IT领域,DWR(Direct Web Remoting)是一个开源的Java框架,它允许JavaScript在浏览器端直接调用服务器端的Java方法,实现了网页与服务器的实时交互,类似于Ajax技术,但...

      Dwr 学习研究应用--Spring和DWR的整合

      《Dwr 学习研究应用--Spring和DWR的整合》 DWR(Direct Web Remoting)是一个开源的Java库,允许JavaScript在浏览器端与服务器端的Java对象进行交互,从而实现动态Web应用程序。它打破了传统的AJAX模式,提供了一种...

      一个简单DWR学习二级菜单实例

      一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例

    Global site tag (gtag.js) - Google Analytics