很久以前就知道了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对象都应该被包含进来