所有工具類
DWR包含兩個(gè)主要部分:
1. 運(yùn)行在服務(wù)器端的servlet控制器(DwrServlet),它負(fù)責(zé)接收請(qǐng)求,調(diào)用相應(yīng)業(yè)務(wù)邏輯進(jìn)行處理,向客戶端返回響應(yīng)。
2.運(yùn)行在瀏覽器端的JavaScript,它負(fù)責(zé)向服務(wù)器端發(fā)送請(qǐng)求,接收響應(yīng),動(dòng)態(tài)更新頁(yè)面
zj.dwr.util.DwrUtil
package zj.dwr.util; import java.util.List; import org.directwebremoting.ScriptSession; import org.directwebremoting.proxy.dwr.Util; import zj.dwr.bean.DwrBean; import zj.dwr.bean.DwrSession; /** * dwr工具類<br> * * @version 1.00 (2011/11/08) * @author 張軍 {@link <a target=_blank href="http://m.eyofj.com">張軍個(gè)人網(wǎng)站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>} */ public class DwrUtil { /** * 發(fā)送數(shù)據(jù)至前臺(tái) * * @param funName * 函數(shù)名 * @param value * 函數(shù)值 * @author 張軍 * @date 2015-11-03 21:59:00 * @modifiyNote * @version 1.0 */ public final static <T> void sendAllMessage(String funName, T value) { for (String key : DwrSession.SCRIPT_SESSIONS.keySet()) { sendMessage(key, funName, value); } } /** * 向前臺(tái)推送消息 * * @param dwrBean * dwr參數(shù) * @author 張軍 * @date 2015-11-03 21:59:00 * @modifiyNote * @version 1.0 */ public final static <T> void sendAllMessage(DwrBean<T> dwrBean) { List<String> funNames = dwrBean.getFunNameList(); for (String key : DwrSession.SCRIPT_SESSIONS.keySet()) { ScriptSession scriptSession = DwrSession.SCRIPT_SESSIONS.get(key); if (scriptSession != null) { Util util = new Util(scriptSession); if (funNames != null && funNames.size() > 0) for (String funName : funNames) { util.addFunctionCall(funName, dwrBean.getTvalue()); } } } } /** * 向前臺(tái)推送單個(gè)key消息 * * @param key * 注冊(cè)鍵 * @param dwrBean * dwr參數(shù) * @author 張軍 * @date 2015-11-03 21:59:00 * @modifiyNote * @version 1.0 */ public final static <T> void sendMessage(String key, DwrBean<T> dwrBean) { List<String> funNames = dwrBean.getFunNameList(); ScriptSession scriptSession = DwrSession.SCRIPT_SESSIONS.get(key); if (scriptSession != null) { Util util = new Util(scriptSession); if (funNames != null && funNames.size() > 0) for (String funName : funNames) { util.addFunctionCall(funName, dwrBean.getTvalue()); } } } /** * 向前臺(tái)推送單個(gè)key消息 * * @param key * 注冊(cè)鍵 * @param funName * 函數(shù)名 * @param value * 函數(shù)值 * @author 張軍 * @date 2015-11-03 21:59:00 * @modifiyNote * @version 1.0 */ public final static <T> void sendMessage(String key, String funName, T value) { ScriptSession scriptSession = DwrSession.SCRIPT_SESSIONS.get(key); if (scriptSession != null) { Util util = new Util(scriptSession); util.addFunctionCall(funName, value); } } }
zj.dwr.bean.DwrBean<T>
package zj.dwr.bean; import java.io.Serializable; import java.util.List; /** * dwr封裝類<br> * * @version 1.00 (2011/11/08) * @author 張軍 {@link <a target=_blank href="http://m.eyofj.com">張軍個(gè)人網(wǎng)站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>} */ public class DwrBean<T> implements Serializable { private static final long serialVersionUID = 1L; private List<String> funNameList; private T tvalue; /** * 調(diào)用前臺(tái)的函數(shù)名 * * @Description * @author 張軍 * @date 2016-8-2 下午9:41:30 * @version V1.0 * @return 調(diào)用前臺(tái)的函數(shù)名 */ public List<String> getFunNameList() { return funNameList; } /** * 調(diào)用前臺(tái)的函數(shù)名 * * @Description * @param funNameList * 調(diào)用前臺(tái)的函數(shù)名 * @author 張軍 * @date 2016 下午9:41:30 * @modifiyNote * @version 1.0 */ public void setFunNameList(List<String> funNameList) { this.funNameList = funNameList; } /** * 傳給前臺(tái)的值 * * @Description * @author 張軍 * @date 2016-8-2 下午9:41:59 * @version V1.0 * @return 傳給前臺(tái)的值 */ public T getTvalue() { return tvalue; } /** * 傳給前臺(tái)的值 * * @Description * @param tvalue * 傳給前臺(tái)的值 * @author 張軍 * @date 2016 下午9:41:59 * @modifiyNote * @version 1.0 */ public void setTvalue(T tvalue) { this.tvalue = tvalue; } }
zj.dwr.bean.DwrSession
package zj.dwr.bean; import java.io.Serializable; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import org.directwebremoting.ScriptSession; import org.directwebremoting.WebContext; import org.directwebremoting.WebContextFactory; import zj.check.util.CheckUtil; /** * dwr注冊(cè)類<br> * * @version 1.00 (2011/11/08) * @author 張軍 {@link <a target=_blank href="http://m.eyofj.com">張軍個(gè)人網(wǎng)站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>} */ public final class DwrSession implements Serializable { private static final long serialVersionUID = 1L; private transient static final Logger log = Logger.getLogger(DwrSession.class); /** Dwr內(nèi)存注冊(cè) **/ public static final Map<String, ScriptSession> SCRIPT_SESSIONS = Collections.synchronizedMap(new HashMap<String, ScriptSession>()); /** * 注冊(cè)session * * @param key */ public final void regScriptSession(String key) { try { WebContext webContext = WebContextFactory.get(); /** 獲取頁(yè)面長(zhǎng)連接session */ ScriptSession scriptSession = webContext.getScriptSession(); // WebSession webSession = GlobalOperation.getWebSession(webContext.getSession().getId()); // if (webSession != null) { // User user = webSession.getUser(); // // 用戶工號(hào)+長(zhǎng)連接標(biāo)識(shí)=scriptSession唯一標(biāo)識(shí) // // scriptSession保存內(nèi)存中 // MemoryConstant.ssMapScriptSession.put(key, scriptSession); // } // // 獲取當(dāng)前頁(yè)面URL,比如/ext3/test_tag.jsp // String currentPage = webContext.getCurrentPage(); // // 獲取所有瀏覽當(dāng)前頁(yè)面的腳本session // Collection<ScriptSession> sessions = webContext.getScriptSessionsByPage(currentPage); // System.out.println("頁(yè)面數(shù):" + sessions.size()); if (CheckUtil.isNotNull(key)) { SCRIPT_SESSIONS.put(key, scriptSession); log.info("注冊(cè)ScriptSession成功【" + SCRIPT_SESSIONS.size() + "】:" + key); } } catch (Exception e) { log.error("注冊(cè)ScriptSession失敗", e); } } /** * 注冊(cè)session * * @param key */ public final void removeScriptSession(String key) { try { SCRIPT_SESSIONS.remove(key); log.info("移除ScriptSession成功【" + SCRIPT_SESSIONS.size() + "】:" + key); } catch (Exception e) { log.error("移除ScriptSession失敗", e); } } /** * 錯(cuò)誤信息 * * @param errorMessage * @param scriptURL * @param lineNumber */ public final void writeJsError(String errorMessage, String scriptURL, String lineNumber) { if (CheckUtil.isNotNull(scriptURL)) log.error("scriptURL:" + scriptURL); if (CheckUtil.isNotNull(errorMessage)) log.error("errorMessage:" + errorMessage); if (CheckUtil.isNotNull(lineNumber)) log.error("lineNumber:" + lineNumber); } }
dwr.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"> <dwr> <allow> <create creator="spring" javascript="dwrUtil"> <param name="beanName" value="dwrUtil" /> </create> <convert converter="bean" match="com.zjsystem.basic.permissions.notices.pageModel.NoticePage" /> <convert converter="bean" match="com.zjsystem.framework.dwr.bean.DwrMsg" /> <convert converter="exception" match="java.lang.Exception" /> <convert converter="bean" match="java.lang.StackTraceElement" /> <convert converter="bean" match="zj.common.KV" /> </allow> </dwr>
總結(jié)
<script type="text/javascript" src="${webRoot }/dwr/engine.js"></script> <script type="text/javascript" src="${webRoot }/dwr/util.js"></script> <script type="text/javascript" src="${webRoot }/dwr/interface/dwrUtil.js"></script> <input type="hidden" class="zj-sid" style="width: 200px" /> <script type="text/javascript" charset="utf-8"> $(function() { /** onUnload方法是在關(guān)閉窗口之后執(zhí)行 onbeforeUnload方法是在關(guān)閉窗口之前執(zhí)行 window.onbeforeunload= function(event) { return confirm("確定離開(kāi)此頁(yè)面嗎?"); } window.onunload = function(event) { return confirm("確定離開(kāi)此頁(yè)面嗎?"); } **/ dwr.engine.setActiveReverseAjax(true); var uuid = "zj-" + jq.UUID(); dwrUtil.regScriptSession(uuid); $(".zj-sid").val(uuid); }); //退出時(shí)刪除 window.onbeforeunload = function(event) { //刪除后臺(tái)session dwrUtil.removeScriptSession($(".zj-sid").val()); } </script> // 發(fā)送數(shù)據(jù)至前臺(tái) for (String key : DwrSession.SCRIPT_SESSIONS.keySet()) { if (key.startsWith("zj-")) { ScriptSession scriptSession = DwrSession.SCRIPT_SESSIONS.get(key); if (scriptSession != null) { Util util = new Util(scriptSession); util.addFunctionCall("zj_dwr", lkv); } } } web.xml ---------------------------------- <!-- Servlet add by zhangjun start --> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <!-- 前臺(tái)輸入地址是否顯示 --> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>pollAndCometEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <description>使用服務(wù)器推技術(shù)(反轉(zhuǎn)AJAX)</description> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>initApplicationScopeCreatorsAtStartup</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>scriptSessionTimeout</param-name> <param-value>21600000</param-value> </init-param> <init-param> <param-name>maxWaitAfterWrite</param-name> <param-value>100</param-value> </init-param> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <!-- Servlet add by zhangjun start --> ---------------------------------- WEB-INF/dwr.xml ---------------------------------- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"> <dwr> <allow> <create creator="spring" javascript="dwrUtil"> <param name="beanName" value="dwrUtil" /> </create> <convert converter="bean" match="com.zjsystem.basic.permissions.notices.pageModel.NoticePage" /> <convert converter="bean" match="com.zjsystem.framework.dwr.bean.DwrMsg" /> <convert converter="exception" match="java.lang.Exception" /> <convert converter="bean" match="java.lang.StackTraceElement" /> <convert converter="bean" match="zj.common.KV" /> </allow> </dwr> ----------------------------------
本文為張軍原創(chuàng)文章,轉(zhuǎn)載無(wú)需和我聯(lián)系,但請(qǐng)注明來(lái)自張軍的軍軍小站,個(gè)人博客http://m.eyofj.com
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
