DWR

来源:互联网 发布:外贸公司取名知乎 编辑:程序博客网 时间:2024/05/01 02:28

  听说dwr不错,想学学,网上教程啊资料啊 铺天盖地 俺觉得学东西的最好办法就是先做出来,于是俺就百度(也Google)了下,抄来个例子,竟然调试到半夜!

       今天想来,觉得应该把这过程记录下来,然后在后面的学习中,多回头看看。

下载dwr的war包,放到tomcat下解开,然后找到dwr.jar包,将其放到我们的web工程的WEB-INF/lib,现在需要做的是将dwr配置到工程。

        修改web.xml,添加dwr的servlet:

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

        然后在WEB-INF下新建dwr自己的配置文件dwr.xml,内容如下:

        <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" 

        "http://www.getahead.ltd.uk/dwr/dwr20.dtd">

        <dwr>

            <allow>

                 <create creator="new" javascript="dwrdemo">

                      <param name="class" value="com.xsoft.dwr.DwrDemo" />

                 </create>

            </allow>

        </dwr>

        下一步就是将dwr.xml引用的DwrDemo类实现。

                java代码:

 

                package com.xsoft.dwr;

 

        public class DwrDemo {

 

           public String getSomething(String name)

           {

              return "Hi, "+name;

           }

        }

 

         现在来说应该已经可以debug测试一下dwr是否可用了。OK,部署到tomcat,启动正常,访问工程进入welcome页面。这时候 肯定没问题,否则是web工程本身的问题(现在还完全跟dwr不搭嘎)。现在在工程名后面直接加上dwr,然后继续访问,正确的话是可以进入dwr的页面,但是 oh,my lady gaga!

 

        提示:找不到类定义,logging的类定义。

                好吧,我们继续到dwr(dwr.war解压包)中去找到这个jar(commons-logging-1.0.4.jar),好了copy到我们工程的lib下。重新发布一下我们的工程,再来访问,首先welcome页面正常,见证奇迹的时刻,url路径添加dwr,回车(url路径后面的index页面是我敲回车自己定位的,与我无关):

 

        好了,进入dwrdemo验证我们的java类是否正常工作:

 

        OK,可以了。

        那下面就是写我们的jsp页面吧。

        这里就要注意了,我们在页面使用dwr,显然是要引入JavaScript包的,引入什么包呢,上面验证的步骤,如果细心的话,已经看到了最上面提示:To user this class in your javascript you will need the following script includes…… OK,将我们需要的js包引入吧。

                <head>

                <title>First-DWR</title>

                <script type='text/javascript' src='/DwrSSH/dwr/interface/dwrdemo.js'></script>

                  <script type='text/javascript' src='/DwrSSH/dwr/engine.js'></script>

                <script type='text/javascript' src='/DwrSSH/dwr/util.js'></script>

                <script type='text/javascript'>                        

                        function inputtext(){

                                var username = document.all.username.value;

                                dwrdemo.getSomething(username,callBackH);

                        }

                        function callBackH(data){

                                alert(data);

                        }

                </script>

       </head>

       <body>

                This is my JSP page.

                <br>

                <input type="text" name="username">

                <input type="button" name="button2" value="输入测试" onclick="inputtext()" />

       </body>

 

        jsp页面完成之后,可以访问页面试验了:

 

        完成了。

 

        现在想来好像很简单,但是刚开始的时候,的确是满头的包啊。

        第一点,logging的jar包问题,我想dwr广泛用于web工程,现在很多web工程使用struts的框架,struts框架是包含了这个包的(经验证两个包是相同的),所有没有dwr默认工程里存在这个包,但是我的例子是没有任何框架的,所有需要手动加入这个包。

        第二点,页面脚本错误,提示dwrdemmo为定义,dwrdemo.js是dwr自动为每个dwr.xml配置里使用到JavaScript标记的变量生成的。所以在验证的时候,上面会有提示“you need……”,把这些js包引入jsp页面就可以了。

        第三点,dwr直接跟后台的java类交互了,java直接获取前台数据并对数据处理,处理之后呢?还是要返回前台的,这时候就需要回调(callback),于是在dwr使用java类的方法(getSomething)要比java多一个参数,这个参数就是要回调前台页面的JavaScript方法名,然后这个方法定义时候包含一个参数(data),这个参数代表java回传给前台的数据。

原创粉丝点击