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

错误