<%@ page contentType="text/html; charset=gb2312"%> ajax/dwr/struts实例开发
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
ajax/dwr/struts实例开发
     发布者: 发布时间:2008-06-12

2005是Ajax最火爆的年份,以gmail为先驱的Ajax应用已经逐渐深入人心了。也许这就是所谓的轮回吧,计算机界面的设计从最初瘦到胖再到瘦,如今又要开始胖了。不过,在web界面的胖与之前的胖还是有很多区别的,web界面的胖主要依赖于DHML和Javascript来实现。这也是本文的来由了,相信很多OO的开发人员都不愿与页面层的效果打交道,尤其是Javascript的这样的开发语言,我也是其中之一了,非常不喜欢Javascript,语法松散,结构复杂。反正是不喜欢了,但是在web时代,既然流行胖子,想不用Javascript是不可能的了,那么怎么样来简化Ajax的开发呢?DWR由此延生了,他封装了XMLHttpRequest,直接调用服务端的方法,省了好多Javascript啊^_^
Struts虽然已经开始开下陡路,但底子厚,将DWR与Struts结合依然会是大多数开发者的选择。
本文分两部分:框架介绍和实例开发。先来:

第一部分 框架介绍

一、Ajax介绍
Ajax--Asynchronous JavaScript and XML,异步JavaScript和XML。
名字中已经包含Ajax的组成部分:异步处理XMLHttpRequest,JavaScript,XML。
其中:
1、XMLHttpRequest是Ajax的关键部分,正是由于他的存在,才使得胖子越来越吃香了。
2、JavaScript是Ajax的必备部分,没有他还玩个屁
3、XML是Ajax数据格式的推荐方式,但也可以不用
当然还少不了CSS,有了CSS使得在Ajax中更容易修改用户的界面
Ajax的细节和样例使用就不多说了,N多的资源,自己找吧。

二、DWR介绍
DWR-Direct Web Remote,翻译过来应该是直接远程网页访问。(这个Web一直找不到好的词语来表达,这里就用网页吧)
如名字所述,DWR的主要特点就是可以在Ajax中直接调用服务器上的方法,很奇妙吧。就是说,不需要通过URL来告诉服务来处理,而是直接在Javascript中调用类的方法,并返回数据。
DWR简化了Ajax的开发:
1、封装了Ajax中的使用,不再需要直接使用XMLHttpRequest了,这可是非常重要的,减少了好多Javascript呀
2、通过回调函数的方式,简化了错误处理及返回数据的处理。
3、直接调用服务器类的方法,不再需要通过URL方式,也省了不少的事。

DWR的主要部件有:dwr.xml/engine.js/util.js,前者是DWR的Servlet使用的配置文件,后两者DWR替我们封装的Ajax的代码,当然也提供了其他有用的功能。

三、Struts介绍
Struts还用介绍吗?没听说过?那就不用往下看,休息休息吧^_^
这里就说一下在DWR如何调用Struts中Action的方法吧,说白了,是不可能的。这不是白说吗#$@$@%@#
实际上是这样的,虽然DWR支持方法的调用,但ActionForward/ActionForm/ActionMap这些东西如何在DWR调用方法前生成呢?我也不知道,所以DWR对Struts的支持实际上就是要重构Action中的方法,去掉上面的东西,然后就可以了(这是DWR说的,可不是我说的^_^)。

看了上面的一小通介绍,不知道大家有没有什么感觉,我也觉得写得太少了,可能看了跟没看差不多。不过这里主要是想大家对这些概念有个了解。接下来的第二部分,将会以实例开发的方式来写,这样就更容易依样画葫芦了(我也比较喜欢这样的方式)。

摘要:先讲一下应用的结构页面端:    demo.jsp用来展示界面服务端:    DemoAction是Struts中的Action子类负责控制转换,    DemoFacade是业务类负责业务处理。    Goods是一个业务实体类Struts部分的配置就
先讲一下应用的结构
页面端:
    demo.jsp用来展示界面
服务端:
    DemoAction是Struts中的Action子类负责控制转换,
    DemoFacade是业务类负责业务处理。
    Goods是一个业务实体类

Struts部分的配置就忽略不说了,实际上这个应用并没有包含Struts的配置
主要讲一下dwr的配置,首先需要在web.xml增加下面的servelt映射:
  <servlet>
    <description>Direct Web Remoter Servlet</description>
    <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>
如上uk.ltd.getahead.dwr.DWRServlet是dwr的核心,用来处理javascript的对远程方法的调用,还有其他参数请参考相关文档。
然后,需要在dwr.xml配置相应的远程方法(与具体需要在客户端调用的方法相关),如下为演示应用的配置:
<dwr>
    <allow>
        <convert converter="bean" match="dwr.demo.Goods"/>
        <create creator="new" javascript="DemoAction" class="dwr.demo.DemoAction">
            <include method="query4dwr"/>
            <include method="copy4dwr"/>
            <include method="paste4dwr"/>
        </create>
        <create creator="new" javascript="DemoFacade" class="dwr.demo.DemoFacade">
            <include method="queryList"/>
            <include method="restore"/>
            <include method="del"/>
        </create>
      </allow>
</dwr>
如上有一个转换器(converter)是用来映射dwr.demo.Goods为bean类型,其他转换器类型请参考相关文档;还有两个创建器分别创建javascript中的DemoAction类和DemoFacade类,分别对应dwr.demo.DemoAction类和dwr.demo.DemoFacade,其中定义的方法就可以从javascript中直接调用了。
最后,我们需要在页面中包含相应的javascript:
  <script src='dwr/interface/DemoAction.js'></script>
  <script src='dwr/interface/DemoFacade.js'></script>
  <script src='dwr/engine.js'></script>
  <script src='dwr/util.js'></script>
如上,dwr/interface/DemoAction.js和dwr/interface/DemoFacade.js是dwr自动生成的javascript文件,包含相应的类及方法,dwr/engine.js是dwr的核心引擎脚本处理客户端调用的转换,dwr/util.js包含了工具函数简化页面处理。

下面以查询为例,看一下dwr的具体使用:
DemoAction:
    public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
        if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
        return demoFacade.queryList(type);
    }
demo.jsp:
  function updateResults() {
    DWRUtil.removeAllRows("goodsbody");
    var type = document.getElementById("type").value;
    DemoAction.query4dwr(type, true, fillTable);
  }
  function fillTable(goods) {
    document.forms[0].select.checked = false;
    document.getElementById("totalRecords").innerHTML = goods.length;
    DWRUtil.addRows("goodsbody", goods, [ addCheckbox, getName, getPrice, getCount]);
  }
如上,DemoAction.query4dwr(type, true, fillTable)就可以直接调用DemoAction的方法了,这里fillTable是函数,dwr通过回调函数的方式来进行后续处理。比较一下javascript和action中的方法参数,HttpServletRequest是可以不传的,dwr会自动加上,另一个就是回调参数放在最后,这是比较好的方式,其他方式请参考文档。

最后看一下,dwr如何与Struts集成,如下代码:
    public ActionForward query(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String type = request.getParameter("type");
        //或者从form中取值
        
        List goodsList = query4dwr(Integer.parseInt(type), true, request);
        request.setAttribute("goodsList", goodsList);
        
        return mapping.findForward("success");
    }

    public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
        if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
        return demoFacade.queryList(type);
    }
前一个方法是Struts的方式,但dwr不支持,因此要重构一下在下面的方法才可以被dwr调用。
实际上,只有在方法中需要使用到HttpServletRequest是才需要重构方法,如果不使用HttpServletRequest,我们就可以直接调用业务层的类的方法,这样即简单又方便,如下:
demo.jsp:
  function restore() {
    DemoFacade.restore(updateResults);
  }

DemoAction:
    public synchronized void restore() {
        goodsList.clear();    
        initGoods();
    }

小结

  dwr封装了ajax中与服务端交互的模块,通过直接调用服务端类的方法简化了客户端与服务端的交互。虽然说还缺省类似tag这样的组件,但已经很大程度简化了ajax的开发。



资源
  1、示例源程序:下载
  2、dwr主站:http://getahead.ltd.uk/dwr
  3、ajax主站:http://en.wikipedia.org/wiki/AJAX

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
ajax/dwr/struts实例开发
ajax之旅dwr探密
DWR学习
七条对于中国大学软件专业同学一些建议
浅谈工程设计在软件开发过程中的应用
J2EE之见
 
最近评论:
        
鍥炲
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(1773)
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(8816)
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(6796)
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(8972)
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(7386)
        
如果真的有来生!
四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游, max(5711)
        
那天的情景!
Maple Story mesos,MapleStory mesos,ms mesos,mesos,SilkRoad Gold, max(7149)
        
那天的情景!
Maple Story mesos,MapleStory mesos,ms mesos,mesos,SilkRoad Gold, max(7387)
        
那天的情景!
Maple Story mesos,MapleStory mesos,ms mesos,mesos,SilkRoad Gold, max(7082)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号