dwr框架介绍
转:
【DWR框架】过时了吗?
对于这个问题,一般态度有三种:
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中,这个地方不需要考虑安全问题,因为跟外界无任何交互,所有类似的框架都需要在这里写导入配置。
- <servlet>
- <display-name>DWR Servlet</display-name>
- <servlet-name>dwr-invoker</servlet-name>
- <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
- <init-param>
- <param-name>debug</param-name>
- <param-value>true</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>dwr-invoker</servlet-name>
- <url-pattern>/dwr/*</url-pattern>
- </servlet-mapping>
这个内容是“将java代码开放给其他人访问“的配置(也就是dwr.xml)
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
- <dwr>
- <allow>
- <create creator="new" javascript="Demo" scope="application">
- <param name="class" value="cn.smileyan.cy.Cyservice"/>
- </create>
- </allow>
- </dwr>
也就是说,这个的作用就是将cn.smileyan.cy.Cyservice这个类开放给外界访问,也就是说,我们可以在前端代码中通过这种方式访问这个类中的public方法,public变量。是不是很危险呢?就是有种将自己后台隐私公之于众的感觉?
其实对于这个问题官网上有说过解决方法。网址如下:
http://directwebremoting.org/dwr/security/script-tag-protection.html
首先我们需要注意的就是类中变量不能public,这本来就不符合java的编程规范,封装性因为public修饰变量名完全被破坏了。另外关于方法的使用限制。我们在dwr.xml可以这样写:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
- <dwr>
- <allow>
- <create creator="new" javascript="Demo" scope="application">
- <include method="test"/>
- <param name="class" value="cn.smileyan.cy.Cyservice"/>
- </create>
- </allow>
- </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框架介绍的更多相关文章
- JS调用Java函数--DWR框架
(1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJA ...
- dwr框架中DWRUtil的方法
dwr框架中DWRUtil的方法 2008-10-14 17:57:23| 分类: JAVA | 标签: |举报 |字号大中小 订阅 7. util.js 功能 util.js包含了一些工 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
[连载]<C#通讯(串口和网络)框架的设计与实现>- 0.前言 目 录 第一章 通讯框架介绍... 2 1.1 通讯的本质... 2 1 ...
- YARN基本框架介绍
YARN基本框架介绍 转载请注明出处:http://www.cnblogs.com/BYRans/ 在之前的博客<YARN与MRv1的对比>中介绍了YARN对Hadoop 1.0的完善.本 ...
- Selenium自动化测试框架介绍
Selenium自动化测试框架介绍 1.测试架构作用 a.可维护性 b.提高编写脚本效率 c.提高脚本的可读性 2.框架的几大要素: Driver管理,脚本,数据,元素对象,LOG,报告,运行机制,失 ...
- UiAutomator自动化测试框架介绍
UiAutomator自动化测试框架介绍 环境搭建 1 必要条件 1.1 JDK 1.2 SDK(API高于15) 1.3 Eclipse 2 ...
- [翻译]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 ...
- MJExtension框架介绍
MJExtension框架介绍 标签: MJExtension 2015-05-01 08:22 1120人阅读 评论(0) 收藏 举报 分类: Foundation(14) 版权声明:本文为博主 ...
- 人工智能深度学习Caffe框架介绍,优秀的深度学习架构
人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...
随机推荐
- 汇编 循环位移指令 ROL, 循环位移指令 ROR
知识点: 循环位移指令 ROL 循环位移指令 ROR 一.循环位移指令 ROL ROR int i=0x77886611;//01110111100010000110011000010001 ...
- pygame 入门实例
本文基于win7(64) + py3.5(64)环境. 本文是这里的一篇学习笔记.加入了自己的理解. 本文最终目的是实现一个飞机躲避导弹的游戏. 1.核心概念 pygame 的核心概念有: Surfa ...
- 阿里云OSS不同账号之间的迁移
目录 一.需求说明 二.Ossimport概述 三.配置运行环境 1.配置jdk环境 2.部署方式 3.下载并部署ossimport 四.修改单机Job的配置文件local_job.cfg 五.执行迁 ...
- C# Language Specification 5.0 (翻译)第五章 变量
变量(variable)表示存储的位置.每个变量都有类型,类型决定变量保存的值的类型.C# 是一门类型安全的语言,C# 编译器会确保变量中保存一个适合类型的值.变量的值可通过赋值或通过使用 ++ 与 ...
- 软件测试_APP测试_主要测试内容
最近要测试手机端APP,所以查找了一下有关APP测试需要注意的事项,做了一下总结.如有补充,欢迎评论! 手机APP测试与WEB测试其实相似,但是也有特别需要注意的一些不同点,此处只列出部分注意事项,相 ...
- 0.1 Maven相关知识(项目开发基础)
一.Maven 1.1Maven是什么 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. Maven这个单词来自于意第绪语(犹太语),意为知识的 ...
- it喜爱的歌词
1.曼丽 我们的过去我们的情义怎么能忘记 #曼丽你怎么这样忍心静静的就离去 #我很伤心从今以后不能够见到你 #只有留下你往日的情景使我常回忆 #一样的青山一样的绿水只有我和你 #曼丽可记得我们时常快 ...
- PAT甲级题解-1100. Mars Numbers (20)-字符串处理
没什么好说的,注意字符串的处理,以及当数字是13的倍数时,只需高位叫法的单词.比如26,是“hel”,而不是“hel tret”. 代码: #include <iostream> #inc ...
- 《Linux内核分析》第三周学习报告
<Linux内核分析>第三周学习报告 ——构造一个简单的Linux系统MenuOS 姓名:王玮怡 学号:201351 ...
- Java单元测试框架 JUnit
Java单元测试框架 JUnit JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中为最成功的一 ...