※下載
DWR首頁下載jar包,而demo要不要下看個人喜好,裡面是範例
也可以用下面maven的方式,但其實啟動伺服器時,還會報缺common jar包的錯,還得再下載(也可以複製官網WAR裡的jar)
我將我沒出錯的pom貼在下面
<dependency> <groupId>org.directwebremoting</groupId> <artifactId>dwr</artifactId> <version>3.0.1-RELEASE</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
選擇左邊的Documentation-->Index
下面一點會看到web.xml和dwr.xml,還有dwr內容的教學
※設定
將上面的web.xml和dwr.xml複製到專案裡,dwr主要是要上面的DTD然後寫一支interface和實作
我將程式碼貼在下面
※Idao和DaoImpl
package dao;
public interface Idao {
public String helloDWR(String name);
}
package dao.impl;
import dao.Idao;
public class DaoImpl implements Idao {
public String helloDWR(String name) {
return new StringBuffer().append("Hello ").append(name).toString();
}
}
※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> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
※dwr.xml
<dwr> <allow> <create creator="new" javascript="xxx"> <param name="class" value="dao.impl.DaoImpl" /> </create> </allow> </dwr>
※new和class不能亂打
※雖然有定interface,但是只能打impl,否則會報錯
※啟動伺服器
web.xml有設定debug是true所以啟動伺服器後
網址如下http://localhost:8080/dwrTest/
dwrTest是我的專案名稱(你不一定是取這個名稱)
再後面加個dwr,會自動變成http://localhost:8080/dwrTest/dwr/index.html
就會出現如下的畫面,debug一定要true,不然會404
dwr.xml裡的javascript="xxx"會出現,點進去後
我標紅色的地方會出現剛剛寫的方法名稱,裡面就是要寫的參數,右邊還有Execute按鈕可看結果
※使用dwr.xml裡的xxx
※index.jsp
<%
String path = new StringBuffer()
.append(request.getScheme())
.append("://")
.append(request.getServerName())
.append(":")
.append(request.getServerPort())
.append(request.getContextPath())
.toString();
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type='text/javascript' src='<%=path%>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/interface/xxx.js'></script>
<script type="text/javascript">
xxx.helloDWR("DWR", helloDWRCallBack);
function helloDWRCallBack(rtn){
document.getElementById('sp').innerHTML = rtn;
}
</script>
</head>
<body>
<h1 id="sp"></h1>
</body>
※<script>那兩行是從debug=true裡面複製的,但我給它絕對路徑(第二張圖的getting started裡面有寫)
p.s 也可以完全不改,直接貼上也是可以run,此時就可以不用最上面的scriptlet了
※在javascript裡可以直接使用xxx,因為已經在dwr.xml裡已經new過了,第二個參數是回傳值,回傳值要寫一個function,名稱可以隨便取,對應好即可
這兩個誰在上面或下面都可以,但也可以合在一起,如下:
xxx.helloDWR("DWR", {
callback : function helloDWRCallBack(rtn){
document.getElementById('sp').innerHTML = rtn;
}
});
※也就是第二個參數變成「{callback : function}」
※因為helloDWRCallBack沒有被其他地方使用,還可以不取名,也就是變成匿名函數
※除了callback外,還有很多,請參考官網





沒有留言:
張貼留言