博客分类: 

 

最近写ajax写烦了,想着能不能有个更简单的“ajax”,一问就问到这个dwr了。赶紧去官网学习了下,这里写个博客记录一下实例。

测试环境:tomcat6.0

1、新建一个web项目(这里比较简单,我就不赘述了),我这里的是TestWeb。

2、安装dwr。

主要用到两个jar包。

一个是dwr.jar:这个是dwr的主要文件,可以去官网下载。

下载链接:http://directwebremoting.org/dwr/downloads/index.html

另一个是commons-logging.jar,这个jar包比较常用,那个版本的都没问题。我这里用的是commons-logging-1.0.4.jar。

将commons-logging-1.0.4.jar和dwr.jar拷贝到TestWeb项目的/WEB-INF/lib目录下。

至此安装完毕。

3、将dwr用到的servlet配置到web.xml中。

  1. <servlet>
  2. <display-name>DWR Servlet</display-name>
  3. <servlet-name>dwr-invoker</servlet-name>
  4. <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
  5. <init-param>
  6. <param-name>debug</param-name>
  7. <param-value>true</param-value>
  8. </init-param>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>dwr-invoker</servlet-name>
  12. <url-pattern>/dwr/*</url-pattern>
  13. </servlet-mapping>

也可以从http://directwebremoting.org/dwr/introduction/getting-started.html中拷贝。

4、添加dwr.xml。

在/WEB-INF新建dwr.xml,名称必须为dwr.xml不能随便取。内容为:

  1. <!DOCTYPE dwr PUBLIC
  2. "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
  3. "http://getahead.org/dwr/dwr30.dtd">
  4. <dwr>
  5. <allow>
  6. <!-- 调用系统类 -->
  7. <create creator="new" javascript="JDate">
  8. <param name="class" value="java.util.Date"/>
  9. </create>
  10. <!-- 调用自定义的类:带一个参数 -->
  11. <create creator="new" javascript="Base64">
  12. <param name="class" value="com.wjl.test.Base64"></param>
  13. </create>
  14. </allow>
  15. </dwr>

具体什么意思可以先不了解,也可以去官网上看或者下载附件进行了解。 官网链接: http://directwebremoting.org/dwr/introduction/getting-started.html。

我这里除了定义了一个系统自带的java.util.Date,还有一个自定义的com.wjl.test.Base64,其代码如下:

  1. public class Base64 {
  2. // 加密
  3. public static String encode(String str) {
  4. byte[] b = null;
  5. String s = null;
  6. try {
  7. b = str.getBytes("utf-8");
  8. } catch (UnsupportedEncodingException e) {
  9. e.printStackTrace();
  10. }
  11. if (b != null) {
  12. s = new BASE64Encoder().encode(b);
  13. //据RFC 822规定,每76个字符,还需要加上一个回车换行去掉换行符
  14. s = s.replaceAll("[\\s*\t\n\r]", "");
  15. }
  16. return s;
  17. }
  18. // 解密
  19. public static String decode(String s) {
  20. byte[] b = null;
  21. String result = null;
  22. if (s != null) {
  23. BASE64Decoder decoder = new BASE64Decoder();
  24. try {
  25. b = decoder.decodeBuffer(s);
  26. result = new String(b, "utf-8");
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. return result;
  32. }
  33. }

5、新建jsp页面进行调用。

a、在webRoot根目录下新建testDwrDemo.jsp,html代码为:

  1. <input type="button" value="获取当前月份" onclick="getMonth();" /><br />
  2. 当前月份:<span id="curMonth"></span>
  3. <br />
  4. <br />
  5. 加密数据:<input type="text" id="encodeStr" size="45"/><br />
  6. 加密后:<input type="text" id="encodeResult" size="45"/><br />
  7. <input type="button" value="加密" onclick="encode();" />

以上代码定义了两个两个方法,分别用来测试第4步中的两个类。

b、在jsp页面引入JS文件

<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/JDate.js"></script>
<script type="text/javascript" src="dwr/interface/Base64.js"></script>

这里有几个注意点:
第一点:所有的js文件必须以dwr开头,即便项目中并不存在dwr文件夹,也不存在以上的四个js。

第二点:engine.js必须要引用。utils.js可以不引用,只有当需要用到其中的方法时才引用。

第三点:后面两个js文件是自己添加的,这种自己添加的js必须带interface目录,也就是自定义js必须以dwr/interface目录开头。(系统的以dwr就OK了)

第四点:自定义JS文件的命名:dwr.xml中javascript属性定义的名称+.+js。我的dwr.xml中javascript属性一个为JDate一个Base64,所以两个js的名称为JDate.js和Base64.js。

c、使用js调用java类中的方法。

  1. function getMonth(){
  2. /*
  3. //JDate:与自定义的js文件名称相同,也与dwr.xml文件中定义的javascript属性值相同
  4. JDate.getMonth(function(data){
  5. alert("当前月份:"+(data+1));
  6. document.getElementById("curMonth").innerHTML=(data+1);
  7. });
  8. */
  9. //也可以写成:
  10. JDate.getMonth(callback);
  11. }
  12. function callback(data){
  13. alert("当前月份:"+(data+1));
  14. document.getElementById("curMonth").innerHTML=data;
  15. }
  16. //该方法用来加密
  17. function encode(){
  18. var str = document.getElementById("encodeStr").value;
  19. var str2 = Base64.encode(str,function callback(returnData) {
  20. alert(returnData);
  21. document.getElementById("encodeResult").value=returnData;
  22. });
  23. }

6、使用tomcat进行调试。

a、java类中的方法调试:

发布项目启动tomcat,在浏览器中输入:http://127.0.0.1:8080/TestWeb/dwr,然后回车。

浏览器中显示所有配置在dwr.xml中的类。点击某个类名,可以查看这个类中的方法。如我这里点击Base64,结果如图:
dwr学习(一):简单dwr实例-LMLPHP
Base64.java中定义了这两个类,且都是公开的,所以在这里显示 了(至于怎么让它不显示,可以看最下边的PS)。

我在encode的括号中输入abc,点击右侧的"Execute"按钮,会自动给我显示加密后的结果,如图:dwr学习(一):简单dwr实例-LMLPHP
 这个调试是不是很有用?

当然想关闭这种调试也很简单,将web.xml中关于dwr的配置中的debug参数值改成false即可,这样子访问http://127.0.0.1:8080/TestWeb/dwr/将会出现404错误,自然也就不能调试了。是不是很方便。

b、JS方法调试。

这个很简单,点击页面按钮看看结果对不对就知道啦。

PS:关于让指定的方法不显示,可以通过<create>标签下的<include>和<exclude>。

<include method=""/>:指定要公开给javascript的方法。
如:<include method="encode"/>,那么在JS中就可以调用该方法encode。
不指定的话就公开所有方法。

<exclude method=""/>:指定要防止被访问的方法。
如:< exclude method="decode"/>,那么在JS中就不可以调用该方法decode。
include和exclude不能同时存在。

注:本文摘自http://1017401036.iteye.com/blog/2338998,在学习的时候觉得不错,收藏一下。如觉得有侵权,可以删除

04-27 23:08