本人使用DWR的目的不单是为了使用它的AJAX功能,最主要还是因为它能够“直接” 访问java类中的方法,实际上在使用的时候DWR框架把在验证文件里面写的JS转换为java代码去访问指定的方法,然后再把结果返回给javascript
本文DEMO下载地址: http://download.youkuaiyun.com/download/xpsharp/3727772
配置
第一步:下载dwr.jar包。commons-logging.jar包(这个包主要是打印DWR框架的debug信息)
第二步:在WebRoot/WEB-INF/下web.xml中配置过滤器
<!-- dwr --> <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> <!-- end dwr -->
第三步:DWR框架也有自己的一个“dwr.xml ”配置文件,用来配置javascript中使用的对象映射java中的哪个类
<?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> <create creator="new" javascript="TestDwr"> <param name="class" value="dwr.TestDwr"/> <!-- dwr.TestDwr 为自己定义的一个类用来处理JS请求的方法 --> </create> </allow> </dwr>
第四步:在jsp页面中使用DWR框架
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>DWR's HelloWorld</title> <!-- 这三个js为使用DWR框架中必须引用的三个JS文件,在现实文件中是不存在的,在使用DWR的时候才会动态为你创建 --> <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/TestDwr.js'></script> <!-- 这三个js为使用DWR框架中必须引用的三个JS文件,在现实文件中是不存在的,在使用DWR的时候才会动态为你创建 --> <!-- 这个文件为真正使用DWR框架的文件 --> <script type='text/javascript' src='hello.js'></script> <!-- 这个文件为真正使用DWR框架的文件 --> </head> <body> <input id="user" type="text" /><input type='button' value='哈罗' onclick='hello();' /> <div id="result"></div> </body> </html>
hello.js
function hello(){ var user = document.getElementById('user').value; TestDwr.sayHello(user,callback); } function callback(msg){ DWRUtil.setValue('result',msg); }
dwr.TestDwr.java
package dwr; public class TestDwr { public static String sayHello(String name){ return "sharp"+name; } }