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框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...
随机推荐
- 一个评测指标就是MAP(Mean Average Precision)平均精度均值。
一个评测指标就是MAP(Mean Average Precision)平均精度均值. 转载 2017年09月13日 10:07:12 标签: 深度学习 892 来源01:Mean Average Pr ...
- 数据库历险记(二) | Redis 和 Mecached 到底哪个好?
文章首发于微信公众号「陈树义」,专注于 Java 技术分享的社区.点击链接扫描二维码,与500位小伙伴一起共同进步.微信公众号二维码 http://p3npq6ecr.bkt.clouddn.com/ ...
- 委托、多播委托(MulticastDelegate)
委托.多播委托(MulticastDelegate) 多播委托(MulticastDelegate)继承自 Delegate ,表示多路广播委托:即,其调用列表中可以拥有多个元素的委托.实际上,我们自 ...
- 如何有效的报告bug?
对于比较棘手的bug,反馈务须清晰.详细.精确,我们给出以下6个建议: 1.现场演示:重复bug出现的操作步骤.这个适用于公司内部人员. 2.详细描述:在什么系统使用哪个版本的YoMail,做了什 ...
- OD之修改文件标题(一)
OD是逆向工程中的一个重要工具,逆向工程调试说明具体请参考:百度百科,OD介绍,当然就我了解而言,俗话就是破解软件,市面上的什么破解版,精简版啥的基本都是通过这种技术的,但是这并不能一概而论说逆向工程 ...
- 《杜增强讲Unity之Tanks坦克大战》4-坦克的移动和旋转
4 坦克移动和旋转 本节课的目标是实现同时wsad和上下左右控制两个坦克分别移动和旋转 4.1 本节代码预览 image 将上节课场景s2另存为s3. 4.2 添加车轮扬沙效果 从Prefabs里 ...
- float和position的使用
http://blog.csdn.net/yaodebian/article/details/58621183
- Scrum Meeting day 2
第二次会议,开发人员会议 . • 前端: 1. 登陆界面,login, sign up, 添加加载时的图片. 2. 主界面:采用类微信类型.应含有联系人.群聊.设置 3. ...
- NBPL团队总结
我们团队钱多多记账软件项目从2017年12月号开始,历时两个周.这两个周,我们从头学起,学到了很多新的知识,对一些概念有了认知,关于团队协作,关于团队建设,关于Android开发.回顾前两周,我们一致 ...
- 四则运算安卓版ver.mk2
做了一点微小的变动....非常微小...不过美观点了就是...那就是----加背景! 变更后的部分代码: <LinearLayout xmlns:android="http://sch ...