六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 33|回复: 0

最简单实用的Ajax框架么,DWR

[复制链接]

升级  18.67%

18

主题

18

主题

18

主题

秀才

Rank: 2

积分
78
 楼主| 发表于 2013-1-23 02:10:56 | 显示全部楼层 |阅读模式
DWR,全称是Direct Web Remoting,直接web远程?我的理解是可以用JavaScript直接调用java方法吧,当然JavaScript是没有权限直接调java方法的,中间还经过了若干过程,dwr做的,就是帮我们处理了这个繁琐的中间过程。

public String getDate(){//举个例子,js处理日期比较麻烦,java则比较顺手return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());}

<script type="text/javascript">//如果我们在javascipt里面能调用我们的java方法,那该多好,dwr帮你完成这一切Ajax.getDate(function(time){    //这里我们就能得到一个14位的时间了,感觉是不是和java里面调用static方法一模一样呢?神似Calendar.getInstance() ?    alert(time);});</script>

-------------------------------------------------------------------

用的人很多了这个,jquery的ajax也不错,但是一直倾向于用dwr,感觉就像直接调用java方法一样,简单方便,也不需要自己处理太多东西,特别是中文处理方面,比jquery强好多。

本文实际上是DWR官方OverView的简版:

1. 下载 dwr.jar 和 commons-logging
2. 在web.xml中配置dwr
<servlet>  <servlet-name>dwr-invoker</servlet-name>  <display-name>DWR Servlet</display-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>


3. 在WEB-INF目录下新建dwr.xml文件
<!DOCTYPE dwr PUBLIC    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"    "http://getahead.org/dwr/dwr20.dtd"><dwr>  <allow>    <create creator="new" javascript="JDate">      <param name="class" value="java.util.Date"/>    </create>    <!--      修改“your.java.Bean”为你的类路径      Demo这个名字也是随便命的,这个名字以后用来调用你your.java.Bean这个类,如下面这个,以后用Demo.getName()之类的,就表示调用Bean类里面的getName方法     -->    <create creator="new" javascript="Demo">      <param name="class" value="your.java.Bean"/>    </create>  </allow></dwr>

4. 已经配完了,简单吧,下面做个demo

这里是我的dwr.xml
<!DOCTYPE dwr PUBLIC    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"    "http://getahead.org/dwr/dwr20.dtd"><dwr>  <allow>    <create creator="new" javascript="Demo">      <param name="class" value="com.djwl.core.dwr.TestDWR"/>    </create>  </allow></dwr>

com.djwl.core.dwr.TestDWR
package com.djwl.core.dwr;public class TestDWR {public String getName(String name){return "my name is: " + name;}}

javascript代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>index.htm</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=gbk"><script type="text/javascript" src="/dwr/interface/Demo.js"></script><script type="text/javascript" src="/dwr/engine.js"></script>    <script type="text/javascript"><!--window.onload = function(){/** * 方法一 * @param {Object} data */Demo.getName("huxiao", {callback:function(data){alert(data)}});/** * 方法二,这两种都是可以的,选用自己喜欢的 * @param {Object} data */Demo.getName("胡晓", function(data){alert(data);});}//--></script></head>  <body></body></html>


5. dwr传的参数不止是string or int……还支持object
你可以在JavaScript端定义一个person对象,然后传给java端,在java端用一个Person person接收,回传的时候也支持json。下面是JavaScript代码,java的就不用写了吧
var person = function(){    this.name = "huxiao";    this.age = 18;}

6. 怎么获取HttpServletRequest 或者 HttpServletResponse 呢?

在dwr里面非常简单,需要他是吧,什么都不用做,直接就拿来用
/** * <p>功能描述:在这里,我添加了两个参数,那么dwr就会自动给我们传过来request和response,前台代码不变</p> *  * @param name * @param request * @param response * @return * @author 胡晓 <BR> kskr@qq.com <BR> * 时间:2010-3-15 下午09:29:51 <BR> */public String getName(String name, HttpServletRequest request, HttpServletResponse response) {System.out.println(request.getRemoteAddr());return "my name is: " + name;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表