dwr

本文介绍DWR的工作原理及如何整合Spring与Hibernate框架。详细步骤包括配置DWR、设置核心控制器、页面交互等,并提供了具体示例。还讨论了整合jQuery及解决懒加载问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,Dwr的原理

Dwr的核心就是直接能够调用业务层的方法,对于返回的数据不需要在来拼json数组,就可以直接使用,但是,其实不是直接访问的service层的方法,是通过生成一个跟业务层相同的方法的js文件,调用和业务层相同方法名的方法来调用核心控制器(dwrServlet)来调用业务层的方法,貌似是直接调用业务层的方法,但是其实真正的不是这样的

 

 

二,整合spring+hibernate的步骤

1,struts+spring+hibernate加载完,测试完成

2,拷dwr.jar 到lib下面

3拷dwr30.dtd 和 dwr.xml 到WEB-INF下面,然后把dwr.xml中的"http://directwebremoting.org/schema/dwr20.dtd" 改成 "dwr30.dtd"(这样就有提示)

4,在dwr.xml中写规则

 <dwr>

      <allow>

//cnverter="bean"是要查关联表,"hibernate3"是不需要查关联表

             <convertmatch="hwt.pojo.*"converter="bean"></convert>         

<create creator="spring" javascript="emp">//creator是指的创建方式,如new, spring,javascript="?"是定义一个在js中用的对象,通过这个对象来调用这个业务方法

                    <paramname="beanName" value="empService"></param>

//name=beanName是死的,value="?"是这个业务对象在applicationContext.xmlbean中的名字

             </create>

      </allow>

 </dwr>

 

5,在web.xml中的servlet中添加一个dwrServlet的核心控制器,要加一个参数:debug = true

<servlet>

        <servlet-name>dwrServlet</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>dwrServlet</servlet-name>

        <url-pattern>/dwr/*</url-pattern>

    </servlet-mapping>

 

有个地方要注意:如果dwr整合的项目是struts2的话,那么struts2中的过滤器中的<url-mapping>[…] </url-mapping>,[…]里面不能是/*,因为这样也会截获dwr的请求,导致找不到Action,可以使用*.action 或者*.do..

 

 

6,测试:http://127.0.0.1:8080/工程名/dwr/

输入地址,看是否能够显示出一个页面,里面好多方法,点击一个自己写的业务层方法来测试一下,看能否得到想要的答案

 

 

7,页面:

      首先要将第6步的测试页面中的前面导入的js代码拷贝到自己的页面,这些js文件就是对应这service层的类生成的一些同名的js文件,通过调用这些文件来调用业务层的方法,但是本人不喜欢用dwr提供的一些方法,我喜欢用jquery来操作dwr,所以我可以不导入    <scripttype='text/javascript'src='/工程名/dwr/util.js'></script>

 

但是我需要在页面导入jqueryjs

    <script>

        $(function(){

        //得到所有的员工

            emp.getAllEmps(function(data){

                $.each(data,function(key,value){

                    alert(data[key].ename+"-"+data[key].empno);

                });

            });

        //根据员工号得到员工的名字

emp.getEmpName(7788,function(data){

                alert(data);

            });

        });

    </script>

 

 

 

 

三,注意:

1,整合jQuery,因为在dwr中也有$,代表document.getElementById("idname");

所以为了使得两个$不混合:

  ·把jQuery的导入的位置放在Dwr的后面,那么不用dwr的$,

  ·jQuery的位置放在Dwr的前面,但是jQuery中的$用jQuery来代替

 

2,解决lazy问题

 1.写语句时用fetch

 2.<convert match="com.pojo.*"converter="hibernate3"></convert>

   不会查关联表

   <convert match="com.pojo.*"converter="bean"></convert>

   用bean会去查dep里面员工集合

 

 3.使用一个过滤器来控制session开关

   请求时:开session

   响应后:关session


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值