近日工作中用到DWR,前段时间研究了一下,过段时间没有接触再入手发现有点生疏,于是今天我就打算在温习一下。
DWR是一个可以允许你去创建AJAXWEB站点的JAVA开源库。它可以让你在浏览器中的Javascript代码调用Web服务器上的Java代码,就像在Java代码就在浏览器中一样。
DWR包含2个主要部分:
l 一个运行在服务器端的Java Servlet,它处理请求并且向浏览器发回响应。
l 运行在浏览器端的JavaScript,它发送请求而且还能动态更新网页。
DWR工作原理是通过动态把Java类生成为Javascript。它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这种从Java到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。 Java从根本上讲是同步机制,然而AJAX却是异步的。所以你调用远程方法时,当数据已经从网络上返回的时候,你要提供有反调(callback)功能的DWR。
好了,就介绍这么多了,做出东西才是王道!
先去官网下载DWR 的jar包,现在最新的是3.0RC2,给出链接地址自己去下载吧:http://directwebremoting.org/dwr/downloads/,建议下载war文件,里面既有例子,也有jar包,何乐而不为呢?!
好了,新建一个web工程,将其命名为DWRDemo,如下图所示:
图1
解压缩下载的文件,将dwr.jar和commons-logging-1.0.4.jar放在WebRoot/WEB-INF/lib下,少了commons-logging-1.0.4.jar会报错的,开始没加这个jar,害我找了半天的错误,郁闷死我了
图2
接下来要向web.xml中添加配置文件,如下所示一部分:
<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>
好了,新建一个service,定义一个方法sayHello(),并传入一个参数,返回一个String类型的字符串,代码如下所示:
package helloWorld;
public class Service {
public String sayHello(StringyourName) {
return "Hello World ," + yourName;
}
}
接着在web.xml配置文件的同目录下另外新建一个dwr.xml文件,用来配置文件,如下所示:
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE dwrPUBLIC "-//GetAheadLimited//DTD Direct Web Remoting 2.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new"javascript="service">
<paramname="class" value="helloWorld.Service"/>
</create>
</allow>
</dwr>
其中,要将这个service写入进去,value为”包名.类名”的格式!
写到这你就可以测试你写的service了,在Myeclipse中部署好以后,打开浏览器,在地址栏输入地址http://localhost:8000/DWRDemo/dwr/,浏览器出现如下所示:
图3
点击service,跳转出来的页面会展现之前在service中定义的一个方法sayHello(),在括号的双引号中输入”Lucy”,点击Execute会出现“Hello World , Lucy”,如下所示:
图4
接下来要编写一个JSP文件,在JavaScript中直接调用service这个类的方法,我就直接在index.jsp这个文件里直接写了,如下所示:
<%@page language="java"import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTMLPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>demo</title>
<script type='text/javascript'src='/DWRDemo/dwr/interface/service.js'></script>
<script type='text/javascript'src='/DWRDemo/dwr/engine.js'></script>
<script type='text/javascript'src='/DWRDemo/dwr/util.js'></script>
<scripttype="text/javascript" src="dwr/interface/service.js"></script>
<scripttype="text/javascript">
functionfirstDwr(){
var firstName=document.forms[0].elements[0].value;
service.sayHello(firstName,callBackHello);
}
function callBackHello(data){
alert(data);
}
</script>
</head>
<body>
<form>
请输入你的姓名:
<input type="text"id=“name”name="firstName" >
<inputtype="button" name="button"value="提交"onclick="firstDwr()">
</form>
</body>
</html>
其中我要说明的是engine.js, util.js ,service.js这3个JavaScript文件,engine.js是必须加入的,util.js是可选的,service.js是根据service这个类自动生成的js文件,engine.js和util.js都在dwr.jar这个文件中 ,有人会问怎么添加路径才是正确的呢,我当初找这个也找了很久,后来发现运行程序出现图4这个页面时会自动给出,你第一次运行时有没有发现这一点呢?呵呵!
好了,把这3个路径添加进去,打开浏览器,输入地址http://localhost:8000/DWRDemo/index.jsp,输入Jack,出现这个页面的时候,恭喜你,你已经算是入门了!
图5
附上本项目结构图:
图6
下面附上官网文档的链接,你可以去官网仔细看看文档:http://directwebremoting.org/dwr/introduction/getting-
started.html
最后附上本文章的下载地址,如果需要希望你去下载,算是对我努力的支持吧,谢谢啦:点我下载
本文已移至http://www.it161.com/