Dwr(Direct Web Remoting)web端直接远程访问技术,允许在浏览器中运行在web服务器上的函数,它包含两部分。
1、 运行在browser端的javascript代码,用来与服务器通讯,更新页面的内容。
2、 运行在server端的java Servlet,这部分用来处理请求并将响应结果发送给浏览器。
Dwr中访问服务器端的js(Ajax)代码是dwr动态生成的
准备工作:
安装dwr1.*.jar开发包 放到项目的\WEB-INF\lib目录下
修改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>
<!--
corssDomainSessionSecurity这个参数是在dwr版本2.0才有的.默认值为true,也就是禁止其他域发送请求,
corssDomainSessionSecurity:设置成false能够从其他域进行请求,但是这样做会在安全性上有一些冒险
就是你自己的项目在用dwr调用的时候是可以的,如果你自己的项目要去调用其它的项目,那就不行,这就是两个不同的域,
如果在你自己的项目中调用那是同一个域。
-->
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<!-- 这段映射告诉 web应用程序,全部以/dwr/ 其实的URL所指向的请求都交给
org.directwebremoting.servlet.DwrServlet这个Servlet来处理
-->
实验证明:
如果用uk.ltd.getahead.dwr.DWRServlet作为dwr的处理类,则无法调出dwr测试页面。
3、 创建前段调用的服务器端类
package helloworld;
//定义方法时应尽量不适用js中的关键字或者保留字,如try() delete()等等
public class Service {
public String sayHello(String yourName){
return "HelloWorld"+yourName;
}
}
4、创建dwr.xml文件
在WEB-INF目录下创建dwr.xml描述性文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<!-- 指定的是暴露给browser的名字(service) -->
<create creator="new" javascript="service">
<param name="class" value="helloworld.Service" />
</create>
</allow>
</dwr>
4、 编写jsp代码调用服务器端程序
<html>
<head>
<title>dwr</title>
<script type="text/javascript" src="/dwr-first/dwr/engine.js"></script>
<script type="text/javascript" src="/dwr-first/dwr/util.js"> </script>
<script type="text/javascript" src="/dwr-first/dwr/interface/service.js"></script>
<script type="text/javascript">
function doTest(){
service.sayHello('zhang',load);
}
function load(data){
alert(data);
}
</script>
</head>
<body>
<input type="button" name="count" value="cont" onClick="doTest();" />
</body>
</html>
注意事项:engine.js与util.js的声明必须要在service.js之前 .否则会出错
Uncaught Error: You must include DWR engine before including this file
simple.jsp:12 Uncaught ReferenceError: service is not defined
错误