最簡單實用的Ajax框架麼,DWR

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官方[url=http://directwebremoting.org/dwr/introduction/getting-started.html]OverView[/url]的簡版:

[color=red][size=xx-large]1[/size][/color]. 下載 dwr.jar 和 commons-logging
[color=red][size=xx-large]2[/size][/color]. 在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>




[color=red][size=xx-large]3[/size][/color]. 在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>



[color=red][size=xx-large]4[/size][/color]. 已經配完了,簡單吧,下面做個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>




[color=red][size=xx-large]5[/size][/color]. dwr傳的參數不止是string or int……還支持object
你可以在JavaScript端定義一個person對象,然後傳給java端,在java端用一個Person person接收,回傳的時候也支持json。下面是JavaScript代碼,java的就不用寫了吧

var person = function(){
this.name = "huxiao";
this.age = 18;
}


[color=red][size=xx-large]6[/size][/color]. 怎麼獲取HttpServletRequest 或者 HttpServletResponse 呢?

在dwr裏面非常簡單,需要他是吧,什麼都不用做,直接就拿來用


/**
* <p>功能描述:在這裏,我添加了兩個參數,那麼dwr就會自動給我們傳過來request和response,前臺代碼不變</p>
*
* @param name
* @param request
* @param response
* @return
* @author 胡曉 <BR> [email protected] <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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章