各种Dwr简介不需要多说,知道是实现局部刷新就差不多了,至于实现原理,慢慢参透吧,一下说明怎么使用DWR
首先建一个web工程,然后添加如下jar包:
清单1、开始编写调用的代码(请求的数据),Us类只是一个存储数据的对象
package com.dwr; import java.util.ArrayList; import java.util.List; /** * 供界面js调用的方法,只写了几个 * @author * */ public class TestMethod { /** * 字符串类型 * @return */ public String sayHi() { return "hello DWR!"; } /** * 字符串类型 * @param yourName 接收的参数 * @return */ public String sayHello(String yourName) { return "hello DWR!" + yourName; } /** * object类型 * @return */ public Us showObj() { Us us = new Us(); us.setUsName("hux"); us.setUsPwd("123"); return us; } /** * list 类型 * @return */ public List showList() { List list = new ArrayList(); Us us = new Us(); us.setUsName("hux"); us.setUsPwd("123"); Us pw = new Us(); pw.setUsName("hux"); pw.setUsPwd("123"); list.add(us); list.add(pw); return list; } }
清单2、配置web.xml文件,(org.directwebremoting.servlet.DwrServlet)jar包里的
<servlet-name>dwr</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</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
清单3、配置dwr.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd"> <dwr> <allow> <create creator="new" javascript="dwrObj" scope="session"><!-- 注意: dwrObj是js中方法调用对象,命名不定--> <param name="class" value="com.dwr.TestMethod" /><!-- 配置的dwr方法 --> </create> <convert converter="bean" match="com.dwr.Us"/><!-- 配置数据存储对象 --> </allow> </dwr>
配置好以上内容就可以测试dwr了,把项目运行起来,在项目url名称 后面加上web.xml配置的dwr地址访问(http://localhost:8080/Test/dwr)
点击dwrObj对象就会看到我们在TestMethod 编写的方法,可以在这里点击Execute测试是否正确,如下:
如果方法都没有问题,就可以在界面调用了
清单4、界面代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <script type='text/javascript' src='/Test/dwr/interface/dwrObj.js'></script> <script type='text/javascript' src='/Test/dwr/engine.js'></script> <script type='text/javascript' src='/Test/dwr/util.js'></script> <!-- 以上三个js文件为dwr测试界面的三个地址,直接拷贝过来即可 --> <script type="text/javascript"> function showOne(){ dwrObj.sayHi(callback);//dwr对象 dwrObj直接调用服务器的方法,其中回调函数callback用于接收数据 } var callback = function(data){ alert("showOne="+data);//显示接收到的数据 } function showTwo(){ var name = dwr.util.getValue("usName") dwrObj.sayHello(name,callbackp);//参数直接传递过去 } var callbackp = function(data){ alert("showTwo="+data); } function showthreen(){ dwrObj.showObj(call); } var call = function(data){ alert("showthreen :us:="+data.usName+"\n"+"pwd:="+data.usPwd);//对象直接点属性就可以了 } function showfour(){ dwrObj.showList(callss); } var callss = function(data){//List直接循环取得对象,对象直接点属性就可以了,那么map什么的都同理了 for (i=0;i<data.length;i++){ alert("us:="+data.usName+"\n"+"pwd:="+data.usPwd); } } </script> <body> This is my JSP page. <br> <button onclick="showOne()">showOne()</button> <br/> <br/><br/> <input type="text" id="usName"/><button onclick="showTwo()">showTwo()</button> <br/><br/><br/> <button onclick="showthreen()">showthreen()</button> <br/><br/><br/> <button onclick="showfour()">showfour()</button><br/><br/><br/> </body> </html>
搞定后再次运行项目 查看效果,如果你仔细的看完了 ,界面js直接调用到了服务器上的方法,是不是觉得dwr很简单呢
(转载请注明原文链接,谢谢)