`
zengbo0710
  • 浏览: 414710 次
社区版块
存档分类
最新评论
阅读更多

同样的web.xml,dwr.xml在本机的resin3.0,Tomcat5下始终不能配置成功,而放到内网却可以。不管内网还是本机,始终提示那个js文件没有找到,没有生成。

以下摘录工作原理:

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

代码
  1. web.xml配置   
  2. <servlet>  
  3.     <servlet-name>dwr-invoker</servlet-name>  
  4.     <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>  
  5.   </servlet>  
  6.   <servlet-mapping>  
  7.     <servlet-name>dwr-invoker</servlet-name>  
  8.     <url-pattern>/dwr/*</url-pattern>  
  9. </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' 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的设计构思很是巧妙。
第一、把java类转化为javascript类由dwr自动完成,只需简单的配置。
第二、应用起来极其简单。开发者不要该服务器代码就可以集成。
第三、容易测试。和webwork一样,隐藏的http协议。
第四、及强扩展性。例如与spring集成,只需修改一点代码。
第五、性能。就我与jason,等简单比较,dwr性能可能是最好的。
第六、自动把java对象转化为javascript对象,并且及易扩展

 

分享到:
评论

相关推荐

    dwr问题管理系统:使用的技术有:jsp、dwr、dbutils/jdbc、简单工厂模式,MVC模式等技术

    《基于DWR的问题管理系统详解》 在信息技术领域,开发高效且实用的管理系统是提升工作效率的重要手段。本文将深入探讨一个名为“ProblemManagerSystem-dwr”的问题管理系统,它采用了一系列先进的技术,包括JSP、...

    java DWR与界面开发文档

    最后,文档会提供一些调试DWR问题的技巧,包括查看服务器日志、使用Firebug或Chrome开发者工具,以及如何设置DWR的调试模式。 通过对这些内容的深入学习和实践,开发者可以熟练地运用DWR来创建动态、交互性强的Web...

    dwr dwrdwr

    dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr

    DWR中文文档DWR

    - 该中文文档将详细介绍DWR的安装、配置、使用方法以及常见问题的解决,是学习DWR的重要参考资料。 通过深入学习这份DWR中文文档,开发者不仅可以掌握DWR的基本用法,还能了解到如何在实际项目中有效利用DWR提升...

    dwr实现ajax功能ajax+dwr

    `ajaxReg(解决中文问题)`可能解决了在使用Ajax注册功能时遇到的中文字符编码问题。 通过学习和实践这些资源,开发者可以深入理解DWR如何与Ajax结合,实现高效的Web应用交互。同时,掌握DWR可以帮助开发者避免编写...

    dwr源码包,dwr.jar包下载

    1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: &lt;!-- 配置DWR --&gt; &lt;servlet-name&gt;dwr-invoker org.directwebremoting.servlet.DwrServlet &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; ...

    dwr demo dwr简单使用

    9. **安全考虑**:在实际项目中,使用DWR时需要注意安全性问题。暴露给JavaScript的服务器端方法可能会引发安全风险,因此需要谨慎设置DWR的访问权限,避免敏感数据和操作被不授权的用户调用。 通过这个简单的DWR...

    dwr笔记 dwr自学资料

    DWR (Direct Web Remoting) 是一种开源Java技术,它允许Web应用程序在浏览器和服务器之间进行实时、双向通信,使得JavaScript可以直接调用服务器端的Java方法,极大地简化了客户端和服务器端的数据交换。本笔记将...

    dwr2.0 dwr3.0 jar包

    在这个版本中,DWR提供了一套全面的API,包括自动转换Java对象到JSON格式,以及处理安全性和并发性问题。此外,DWR 2.0支持自动刷新,这意味着当服务器端的Java类或方法发生变化时,无需重新加载页面,客户端的...

    dwr1+dwr2+dwr3 jar包

    这个压缩包包含了DWR的三个主要版本:DWR1.0、DWR2.0和DWR3.0的jar包,这些jar包是运行DWR应用的核心组件。 DWR1.0: DWR1.0是DWR项目的早期版本,主要目标是简化Web应用中的异步通信。在这个版本中,DWR提供了一个...

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

    在这个压缩包中,"DWR开发培训.ppt"可能是一个演示文稿,用于教学或研讨会,其中可能包含PPT幻灯片,系统地介绍了DWR的各个方面,可能包括实例演示、最佳实践和常见问题解答。 总的来说,这个DWR教程包提供了一套...

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

    DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现实时的JavaScript到服务器端Java对象的通信。这个技术允许开发者在浏览器中直接调用服务器端的方法,极大地简化了AJAX(Asynchronous JavaScript ...

    DWR3.0.jar、DWR.war和DWR2.0中文说明文档

    这个压缩包包含了DWR的三个关键组件:DWR3.0.jar,DWR的实例war文件,以及DWR2.0的中文说明文档。以下是关于这些组件的详细知识: 1. **DWR3.0.jar**: DWR3.0.jar是DWR框架的核心库,包含所有必需的类和接口,...

    DWR中文文档 (DWR 2.0)

    **10.1 常见问题**:列举在使用DWR过程中可能会遇到的一些常见问题及其解决方案。 1. **TransformerFactoryConfigurationError**:解决方法可能是检查TransformerFactory的配置是否正确。 2. **XML解析错误**:通常...

    dwr.jar 以及dwr配置文件

    Direct Web Remoting (DWR) 是一个开源的Java库,它允许在JavaScript和服务器端Java之间进行双向通信,实现Web应用程序的Ajax功能。DWR使得动态网页能够与后台服务器进行实时交互,无需刷新整个页面,提高了用户体验...

    DWR配置文件详解,DWR配置

    **DWR配置文件详解** Direct Web Remoting (DWR) 是一种开源的Java库,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行双向通信。DWR的核心配置文件是`dwr.xml`,该文件定义了DWR允许访问的Java对象、...

    Dwr入门操作手册Dwr

    Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr...

    dwr所需要的jar包

    DWR (Direct Web Remoting) 是一个开源Java库,它允许Web应用程序在浏览器和服务器之间进行实时通信,无需使用插件或复杂的JavaScript框架。DWR简化了AJAX(Asynchronous JavaScript and XML)开发,使开发者可以像...

    DWR3.0.2-RELEASE修改版源码(解决资源加载问题导致的和SpringBoot整合后SpringBoot项目无法以独立JAR运行)

    在本案例中,我们关注的是DWR 3.0.2-RELEASE的一个修改版,这个版本专门针对与Spring Boot 1.x集成时出现的问题进行了优化,特别是解决了在Spring Boot应用以独立JAR运行时,由于资源加载问题导致的应用无法启动的...

Global site tag (gtag.js) - Google Analytics