转:

【DWR框架】过时了吗?

置顶 2018年06月02日 11:59:02 许你笑颜 阅读数:4129
 
版权声明: https://blog.csdn.net/smileyan9/article/details/80545795

对于这个问题,一般态度有三种:

1.    当然过时了,Ajax我们可以使用jQuery很容易就可以实现,何必使用DWR这个需要配置,需要担心java代码泄露的危险的。

2. 当然没有过时,现在仍然有不少项目需要这个框架来实现一些效果,怎么说也是一个很不错的框架,使用方便,能够适应各种框架中。

3.    不好说。

对于这个问题我们不急于立即得到答案,我们可以看一下这个论坛https://bbs.csdn.net/topics/390981028,总结以下发帖者的观点如下: 1. DWR框架笨重,使用不便(使用时常常各种报错)。2.DWR框架只是用于实现Ajax。3.DWR框架有代码入侵的危险。

这个问题也应该是很多人关注的问题,我们慢慢回答。

首先,最需要回答的应该是代码入侵的问题。为什么会担心这个问题呢?我们可以从DWR的配置过程中找到答案,下面内容是DWR配置过程(以Servlet为例,Struts,Spring等类似)

这个内容是加载DWR框架,写在web.xml中,这个地方不需要考虑安全问题,因为跟外界无任何交互,所有类似的框架都需要在这里写导入配置。

  1. <servlet>
  2. <display-name>DWR Servlet</display-name>
  3. <servlet-name>dwr-invoker</servlet-name>
  4. <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
  5. <init-param>
  6. <param-name>debug</param-name>
  7. <param-value>true</param-value>
  8. </init-param>
  9. </servlet>
  10.  
  11. <servlet-mapping>
  12. <servlet-name>dwr-invoker</servlet-name>
  13. <url-pattern>/dwr/*</url-pattern>
  14. </servlet-mapping>

这个内容是“将java代码开放给其他人访问“的配置(也就是dwr.xml)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
  3.  
  4.  
  5. <dwr>
  6. <allow>
  7. <create creator="new" javascript="Demo" scope="application">
  8. <param name="class" value="cn.smileyan.cy.Cyservice"/>
  9. </create>
  10. </allow>
  11. </dwr>

也就是说,这个的作用就是将cn.smileyan.cy.Cyservice这个类开放给外界访问,也就是说,我们可以在前端代码中通过这种方式访问这个类中的public方法,public变量。是不是很危险呢?就是有种将自己后台隐私公之于众的感觉?

其实对于这个问题官网上有说过解决方法。网址如下:

http://directwebremoting.org/dwr/security/script-tag-protection.html

首先我们需要注意的就是类中变量不能public,这本来就不符合java的编程规范,封装性因为public修饰变量名完全被破坏了。另外关于方法的使用限制。我们在dwr.xml可以这样写:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
  3.  
  4.  
  5. <dwr>
  6. <allow>
  7. <create creator="new" javascript="Demo" scope="application">
  8. <include method="test"/>
  9. <param name="class" value="cn.smileyan.cy.Cyservice"/>
  10. </create>
  11. </allow>
  12. </dwr>

跟之前的不同在于<include>标签,也就是说外界访问的时候,这个类中所有方法只能访问这个test方法。这样做是不是感觉好多呢?所有的类中变量要用private修饰,提供给外界访问的方法事先配置好。

至于其他方式的攻击手段以及保护方法请阅读上面提供的官网介绍。

目前我们已经能够比较好的解决了这个问题了,如果还要要求苛刻的话也是不可能的,就算使用jQuery也同样需要指定URL然后再使用get或是post方法,比如说Servlet与jQuery结合使用,jQuery也是访问servlet的路径然后进行操作,而DWR框架的好处也是如此,Servlet的访问路径是在web.xml中配置的(注解的方式也是如此),而DWR框架中设定的访问路径是在dwr.xml中配置的。想访问Servlet类中的其他变量是不可能的,因为jQuery只能访问Servlet输出内容,从而实现了安全性。而dwr也是如此,只能访问实现配置好的方法,如果事先配置好的方法里面有return什么的话,也就可以拿到后台数据。其他内容通过配置同样对jQuery是不可见的。

问题应该解决得差不多了吧?

其次我们说说“不就是Ajax吗,jQuery就能实现”这个问题。

说实话这个未免理解有点不到位,DWR的宣传语是 “ Easy Ajax For Java”,或者说总体介绍是这样的,但是它原本不止如此的。当然,如果想实现我那个Ajax例子当然不要使用DWR这个框架,因为相对于jQuery来说太麻烦了。

但是jQuery实现后台推送应该如何完成呢?Ajax有一个很大的缺陷就是“无法满足传统桌面系统的需求——服务器端需要向客户端主动发送消息”。服务端推送技术的应用场景有很多,这个地方不多介绍。

DWR框架是可以完成这个的。也就是说,这个时候我们就可以发现DWR框架不只是"Easy Ajax For Java"了。

这个回答能不能反驳那个观点呢?这里提供一个DWR官网例子,大家可以尝试玩一下,最好是打开两个或两个以上浏览器,然后尝试聊天。但这个例子不是很好的例子,但不管怎么说也是后台推送的一个例子。网址如下:https://www.smileyan.cn/dwrdemo/reverseajax/java-chat.html

效果如下:

    

强调一下这个例子的玩法:首先用电脑打开这个网址,然后用手机浏览器进入这个网址并且输入信息回车,然后可以发现自己电脑上已经输出了手机上输入的内容。这个就是一个后台推送的例子。

最后一个问题就是DWR笨重,配置不便的问题

配置遇到问题我也是遇到过,不过那是在第一次使用此框架的时候。就像我第一次使用struts2,使用Hibernate,和使用Spring框架一样。尤其是在配置SSH框架的时候,三个框架爱整合花了我相当多的时间。

框架都有一个通病,就是需要配置,而且配置都不会像我们配置Servlet一样简单。但是我们却要从Servlet过渡到Struts,从简单的JDBC可以实现,到使用Hibernate,从无Spring到使用Spring,因为这些框架可以解决很多问题,所以我们要不怕麻烦的配置它,越是功能强大的框架配置越麻烦。

当然,又有人会说,“为什么我配置spring的时候感觉没那么难呢?“ 我想说这个也要分情况的,不同人不同场合不同情况也会有不同工作效率的。还有就是方法问题了。分步骤,逐步测试,等等各种方法,很多经验都是需要长时间慢慢积累的。

总算完成了,喜欢的话希望读者点个赞吧,感谢阅读!

dwr框架介绍的更多相关文章

  1. JS调用Java函数--DWR框架

    (1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJA ...

  2. dwr框架中DWRUtil的方法

    dwr框架中DWRUtil的方法 2008-10-14 17:57:23|  分类: JAVA |  标签: |举报 |字号大中小 订阅     7. util.js 功能 util.js包含了一些工 ...

  3. [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍

    [连载]<C#通讯(串口和网络)框架的设计与实现>- 0.前言 目       录 第一章           通讯框架介绍... 2 1.1           通讯的本质... 2 1 ...

  4. YARN基本框架介绍

    YARN基本框架介绍 转载请注明出处:http://www.cnblogs.com/BYRans/ 在之前的博客<YARN与MRv1的对比>中介绍了YARN对Hadoop 1.0的完善.本 ...

  5. Selenium自动化测试框架介绍

    Selenium自动化测试框架介绍 1.测试架构作用 a.可维护性 b.提高编写脚本效率 c.提高脚本的可读性 2.框架的几大要素: Driver管理,脚本,数据,元素对象,LOG,报告,运行机制,失 ...

  6. UiAutomator自动化测试框架介绍

    UiAutomator自动化测试框架介绍 环境搭建 1         必要条件 1.1       JDK 1.2       SDK(API高于15) 1.3       Eclipse 2    ...

  7. [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续

    英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...

  8. MJExtension框架介绍

    MJExtension框架介绍 标签: MJExtension 2015-05-01 08:22 1120人阅读 评论(0) 收藏 举报  分类: Foundation(14)  版权声明:本文为博主 ...

  9. 人工智能深度学习Caffe框架介绍,优秀的深度学习架构

    人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...

随机推荐

  1. 汇编 循环位移指令 ROL, 循环位移指令 ROR

    知识点:  循环位移指令 ROL  循环位移指令 ROR 一.循环位移指令 ROL ROR int i=0x77886611;//01110111100010000110011000010001 ...

  2. pygame 入门实例

    本文基于win7(64) + py3.5(64)环境. 本文是这里的一篇学习笔记.加入了自己的理解. 本文最终目的是实现一个飞机躲避导弹的游戏. 1.核心概念 pygame 的核心概念有: Surfa ...

  3. 阿里云OSS不同账号之间的迁移

    目录 一.需求说明 二.Ossimport概述 三.配置运行环境 1.配置jdk环境 2.部署方式 3.下载并部署ossimport 四.修改单机Job的配置文件local_job.cfg 五.执行迁 ...

  4. C# Language Specification 5.0 (翻译)第五章 变量

    变量(variable)表示存储的位置.每个变量都有类型,类型决定变量保存的值的类型.C# 是一门类型安全的语言,C# 编译器会确保变量中保存一个适合类型的值.变量的值可通过赋值或通过使用 ++ 与 ...

  5. 软件测试_APP测试_主要测试内容

    最近要测试手机端APP,所以查找了一下有关APP测试需要注意的事项,做了一下总结.如有补充,欢迎评论! 手机APP测试与WEB测试其实相似,但是也有特别需要注意的一些不同点,此处只列出部分注意事项,相 ...

  6. 0.1 Maven相关知识(项目开发基础)

    一.Maven 1.1Maven是什么 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. Maven这个单词来自于意第绪语(犹太语),意为知识的 ...

  7. it喜爱的歌词

    1.曼丽 我们的过去我们的情义怎么能忘记  #曼丽你怎么这样忍心静静的就离去 #我很伤心从今以后不能够见到你 #只有留下你往日的情景使我常回忆 #一样的青山一样的绿水只有我和你 #曼丽可记得我们时常快 ...

  8. PAT甲级题解-1100. Mars Numbers (20)-字符串处理

    没什么好说的,注意字符串的处理,以及当数字是13的倍数时,只需高位叫法的单词.比如26,是“hel”,而不是“hel tret”. 代码: #include <iostream> #inc ...

  9. 《Linux内核分析》第三周学习报告

    <Linux内核分析>第三周学习报告                                    ——构造一个简单的Linux系统MenuOS 姓名:王玮怡  学号:201351 ...

  10. Java单元测试框架 JUnit

    Java单元测试框架 JUnit JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中为最成功的一 ...