簡介:
DWR可以幫助開發人員完成應用AJAX技術的web程序,它可以讓瀏覽器上的javascript方法調用運行在web服務器上java方法。
DWR主要由兩部門組成。javascript與web服務器通信并更新web頁;運行在web服務器的Servlet處理請求并把響應發回瀏覽器。
DWR采用新穎的方法實現了AJAX(本來也沒有確切的定義),在java代碼基礎上動態的生成javascript代碼。web開發者可以直接調用這些javascript代碼,然而真正的代碼是運行在web服務器上的java code。出與安全考慮,開發者必須配置哪些java class暴露給DWR.(dwr.xml)
DWR不認為瀏覽器和web服務器之間協議重要,把系統界面放在首位。最大挑戰是java method call的同步特征與ajax異步特性之間的矛盾。在異步模型里,結果只有在方法結束后才有效。DWR解決了這個問題,把回調函數當成參數傳給方法,處理完成后,自動調用回調方法。
配置:
- 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>false</param-value>
</init-param>
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
- dwr.xml:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="spring" javascript="main_MenuCatalogDWR" scope="page">
<param name="beanName" value="/main/MenuCatalogDWR"/>
</create>
<create creator="spring" javascript="main_TreeDWR" scope="page">
<param name="beanName" value="/main/TreeDWR"/>
</create>
<create creator="spring" javascript="main_OperateFilterDWR" scope="page">
<param name="beanName" value="/main/OperateFilterDWR"/>
</create>
<create creator="spring" javascript="main_RightTreeDWR" scope="page">
<param name="beanName" value="/main/RightTreeDWR"/>
</create>
<convert converter="dom4j" match="org.directwebremoting.convert.DOM4JConverter">
</convert>
<convert converter="dom" match="org.directwebremoting.convert.DOMConverter">
</convert>
</allow>
</dwr>
3.jsp頁面設置:
//以下兩行是dwr所必需的
<script type='text/javascript' src="<c:url value='/dwr/engine.js'/>"></script>
<script type='text/javascript' src="<c:url value='/dwr/util.js'/>"></script>
<script type='text/javascript' src="<c:url value='/dwr/interface/main_MenuCatalogDWR.js'/>"></script>
說明:<script type='text/javascript' src="<c:url value='/dwr/engine.js'/>"></script>
<script type='text/javascript' src="<c:url value='/dwr/util.js'/>"></script> 是dwr所必需的
<script type='text/javascript' src="<c:url value='/dwr/interface/main_MenuCatalogDWR.js'/>"></script>主要作用是:
dwr/interface/這種請求到來,(如上面的<script type='text/javascript' src="<c:url value='/dwr/interface/main_MenuCatalogDWR.js'/>"></script>)DWR做一件偉大的事。把我們在WEB-INF/dwr.xml中的
<create creator="spring" javascript="main_MenuCatalogDWR" scope="page">
<param name="beanName" value="/main/MenuCatalogDWR"/>
</create>轉化為javascript函數。
4.beanName配置(本項目spring配置文件為action-servlet.xml)
<bean name="/main/MenuCatalogDWR" class="com.icsshs.webapp.main.MenuCatalogDWR" singleton="false">
<property name="hsRoleRightManager">
<ref bean="hsRoleRightManager"/>
</property>
</bean>
5.jsp頁面調用:
function menucatalog(){
main_MenuCatalogDWR.execute("",callbackok);
}
function callbackok(data){
var root0=data.documentElement;
if (root0.childNodes.length>0){
if (root0.childNodes(0).childNodes.length==0) return;
$("mainmenu").innerHTML=root0.childNodes(0).childNodes(0).text;
key=root0.childNodes(1).childNodes(0).text;
if (parent.frames.leftFrame.document.readyState == "complete"){
setmenuclick(key);
}else{
setTimeout("setmenuclick('"+key+"')",500);
}
}
}
說明:callbackok為回調函數,data為dwr返回的結果集