啟動伺服器後,訪問 https://localhost:[port]/[webapp]/dwr/,若顯示已定義的 Service 名稱(如 remote),說明基礎配置成功。點擊 Service 名稱可查看所有暴露的方法,僅標註 @RemoteMethod 的方法可直接在頁面測試。
<script type='text/javascript' src='<%=request.getContextPath()%>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=request.getContextPath()%>/dwr/util.js'></script>
<script type='text/javascript' src='<%=request.getContextPath()%>/dwr/interface/remote.js'></script>
engine.js:DWR 核心引擎,處理通訊協議。util.js:DOM 操作工具輔助。remote.js:DWR 自動生成的 JavaScript 代理,對應後端 remote Service。<script type="text/javascript">
$(function() {
// 直接呼叫後端 remote.setEnableDwrUpdate()
remote.setEnableDwrUpdate({
callback: function(data) { console.log("伺服器回應:", data); },
errorHandler: function(msg, ex) { console.error("呼叫失敗:", msg, ex); }
});
});
</script>
關鍵點:Java 方法參數若為基本類型/String,JS 直接傳遞;若為複雜對象,DWR 會自動轉換為 JSON 物件,前端構建同結構 JSON 即可。
remote.setEnableDwrUpdate()/dwr/exec/remote.setEnableDwrUpdateDwrServlet 接收,反序列化,調用 SessionExpiredParam.setEnableDwrUpdate()web.xml 或 Servlet 註冊映射是否為 /dwr/*。@RemoteMethod,類標註 @RemoteProxy。crossDomainSessionSecurity="false" 或設置 CORS 標頭。ScriptScope 設置正確(APPLICATION/SESSION/PAGE)。下篇將介紹 反向 AJAX(Reverse AJAX):後端主動推送數據到前端,實現即時通知、長連接保活等進階場景。