`

dwr学习

阅读更多
第二篇 hello world讲解

前面一篇文章给大家介绍了一个最简单的DWR应用的配置和实现过程,即一个hello world程序。这次我们来走进DWR的内心世界,了解她的配置,运行过程和工具类。
先来复习以下上一章hello world的部分内容:
1。把dwr.jar放在你webapp的WEB-INF/lib目录下
2。把以下几行代码添加到WEN-INF/web.xml文件中(以DWR2。0为准)
<servlet>
 <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>
3。在web.xml的同一目录下,创建dwr.xml,并且将要被调用的java类写入其中
下面我们就来看看dwr.xml文件该怎么配置。
<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
    "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
    <create creator="new" javascript="MyHello">
      <param name="class" value="dao.Hello"/>
    </create>
</allow>
</dwr>

PS:这是上一章hello world程序中用的dwr.xml。
  1。其中<allow>部分定义了DWR能够创建和转换的类。
  2。每一个在jsp页面中被异步调用的类需要一个<create>,有若干类型的creator,使用“new”关键字或者Spring 框架等。<javascript>的作用是在浏览器里给你创建的对象命名。
  3。<param>被用来指定创造器的其他参数,每种构造器各有不同。例如,"new"创造器需要知道要创建的对象类型是什么。
在上面的dwr.xml中,我们在<create>中指定使用new来创建对象(就如同在java中我们使用new来创建对象一样),对象的名称为MyHello,这个对象可以在浏览器中被我们使用。在<param>中,我们指定name="class" value="dao.Hello",这表示我们创建的MyHello对象的类型是处于dao包中的一个名为Hello的类。
这样配置好之后,我们就可以在jsp页面中通过使用MyHello对象来访问dao包中的Hello类里面的方法了。

然后我们再来看一下jsp页面里面的代码。
<script src="dwr/interface/MyHello.js"></script>
<script src="dwr/util.js"></script>
<script src="dwr/engine.js"></script>
<script type="text/javascript">
function hello()
{
    MyHello.sayHello(helloBack);
}

function helloBack(data)
{
    dwr.util.setValue("show",data);
}
</script>

<body>
    <input type="button" value="我要向世界问好!" >
    <div id="show">这里将要显示出hello world,这是通过dwr调用Hello类中的sayHello()方法返回的结果!</div>
</body>

PS:
  1。上面加载的外部js文件是必要的,其中MyHello.js能让你使用你在dwr.xml中创建的对象MyHello,util.js相当于一个工具,能让你很方便的操作页面里的内容,engine.js是dwr所必须的,没有它dwr就不能运行。
  2。页面里只有一个按钮,和一个div,当点按钮的时候会调用hello()方法,那我们就来看看javascript中的hello()方法。在这个hello()方法中只有一行代码,表示要调用MyHello对象的sayHello()方法,就是可以异步调用后台dao包中Hello类的sayHello()方法。MyHello是你在dwr.util中配置的一个可以在浏览器中访问的对象的名称,它的类型是dao.Hello类。但是在后台Hello类中的sayHello()方法里,并没有参数,那MyHello.sayHello(helloBack);里为什么会有一个helloBack参数?这是因为Hello.sayHello()方法将返回一个String类型的值,所以调用javascript中的hello()方法之后,将交给helloBack()方法处理,MyHello.sayHello(helloBack);里面的参数就是要指定返回结果之后交给哪个方法处理。
   3。在helloBack()方法里,有个参数data,这就是刚才hello()方法返回的结果,我们可以将这个返回的字符串用
alert(data);显示出来。但我们使用了dwr.util.setValue("show",data);这行代码就用到了util.js里面的工具。
  4。dwr.util.setValue(参数1,参数2)可以将内容加入到指定id的标记内容里去。比如,上面有个id="show"的div,那么dwr.util.setValue("show",data);就是将data参数里的字符串加入到了div的内容里去了。如果dao.Hello类中的sayHello()方法返回一个“hello world”字符串,那么<div>里的内容变为<div id="show">hello world</div>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics