很久以前就知道了DWR,就是一直没有涉及它,因为一直没有做这个方面的开发。

近来心血来潮,抽空学习了一下入门。

当然,首先是下载DWR,接着是建立WEB项目(例如,我的是ajaxTest),导入DWR.jar。

然后是配置XML文档:web.xml、dwr.xml,这些就看官网上的教程吧。

一下是我的一些实验内容:

========ADD=====web.xml---start

    <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>

=======ADD======web.xml---end

 

========ADD=====dwr.xml---start

        <create creator="new" javascript="infor">
            <param name="class" value="myAbouts.GetInfo" />
        </create>

========ADD=====dwr.xml---end

 

还有类:

=============myAbouts.GetInfo---start

package myAbouts;

 public class GetInfo {

     public String getInclude(String yourName){
         System.out.println("=============calling===getInclude===========");
         String result = "<h1>getInclude:</h1>";
         return result+yourName;
     }
     public String getInclude2(String yourName){
         System.out.println("=============calling====getInclude2==========");
         String result = "<h1>getInclude2:</h1>";
         return result+yourName;
     }
 }

 

=============myAbouts.GetInfo--- end

 

 

好了,可以测试一下DWR的配置情况了。启动服务器,输入地址:

http://127.0.0.1:8080/ajaxTest/dwr/

会出现你在dwr.xml文件里配置好的javascript类:

================================

Classes known to DWR:

  • infor (myAbouts.GetInfo)

================================

点击链接进去就可以看到,刚才在myAbouts.GetInfo.java里定义的方法了。

 

  • );
  • );

  •  
    在引号中输入内容,点击后面的按钮,可以看到预想结果出来了。
     
  • ); <script type="text/javascript"> </script> "<h1>getInclude:</h1>大法官法"
  • ); <script type="text/javascript"> </script> "<h1>getInclude2:</h1>冲锋号"
  •  
     
    到这里,DWR的配置已经正常完成。如果在上面的测试步骤中不能得到你的预想结果,那就是你的配置有问题了,可以参考官方的资料自己仔细检查,也可以给我留言,一起学习。
     
     
    下面,我来讲一下,在页面中出现未定义问题时的解决方法。
    通常地,建立页面文件:
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>DWR-TEST</title>
        <!-- 根据刚才在“http://127.0.0.1:8080/ajaxTest/dwr/ ”进去后看到的提示内容,添加下面的几行。-->
        <script type='text/javascript' src='dwr/interface/infor.js'></script>
        <script type='text/javascript' src='dwr/engine.js'></script>
        <script type='text/javascript' src='dwr/util.js'></script>
       
        <!-- 定义页面处理函数 -->
        <script type="text/javascript">

             function firstDwr (arg){            // 页面事件响应函数
                    //alert(arg);
                    infor.getInclude(arg,callBackHello);

             }
             function callBackHello(data){    //回调函数。如果早期接触过ajax的话,应该有所了解。
                      alert(data);
                   $("myText").value = $("myText").value + data;
             }
    </script>
       
       
        <link rel="stylesheet" type="text/css" href="index.css">
      </head>
     
      <body>
        This is my DWR-TEST page. <br>
        <input type="button" name="button" value="测试($=getElementbyId)" οnclick="firstDwr('max')"/>
        <input type="text" id="myText" value="只是测试……" size="100"/>
        <hr>
      </body>
    </html>
    =========================================
    通过以上,你可以看到DWR已经可以正常使用到页面了。
    OK,添加一个类。
    如下:
    =====dwr.xml==========
    <create creator="new" javascript="service">
                <param name="class" value="helloWorld.Service" />
            </create>
    =====dwr.xml==========
    和java类:
    =====helloWorld.Service==========
    package helloWorld;

    public class Service {
        public String sayHello(String yourName) { //可以是访问数据库的复杂代码
            return "Hello World " + yourName;
        }
    }
    =====helloWorld.Service==========
     
    然后,再将页面上的事件响应函数firstDwr
    infor.getInclude(arg,callBackHello);
    修改为
    service.sayHello(arg,callBackHello);
     
    然后,在打开页面测试,发现错误了?!“未定义对象”?!
    很好,至少,你能够懂得基于例子上的创新实践。
     
    解决方法:
    登陆页面http://127.0.0.1:8080/ajaxTest/dwr/
    看到对应的JAVASCRIPT类的页面。
    发现没有,页面上提示了,你应该插入以下<script>标签:
    <script type='text/javascript' src='dwr/interface/service .js'></script>
        <script type='text/javascript' src='dwr/engine.js'></script>
        <script type='text/javascript' src='dwr/util.js'></script>

     
    跟刚才一样?错了!!!
    第一行中的可不一样哦!!
    <script type='text/javascript' src='dwr/interface/service .js'></script>
    其中,红色的字体,就是你在该页面中将要使用的一个javascript类,该文件不会真的存在
    那好,添加这样的一行进去吧。再测试页面……成功了吧?。。恭喜你!!
     
    总结:当确认DWR配置成功后,如果页面提示有“未定义错误”时,应该检查一下,你所用到的javascript类所对应的文件,是否已经显式地包含进页面里。所有在页面使用到的JAVASCRIPT对象都应该被包含进来