※下載
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外,還有很多,請參考官網
沒有留言:
張貼留言