DWR3.0能夠經過 javascript
//獲得全部ScriptSession Collection<ScriptSession> sessions = Browser.getTargetSessions();
Collection pages = webContext.getScriptSessionsByPage("/yourPage.jsp");
package sugar.dwr; import java.util.Collection; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpSession; import org.directwebremoting.ScriptSession; import org.directwebremoting.WebContext; import org.directwebremoting.WebContextFactory; import org.directwebremoting.event.ScriptSessionEvent; import org.directwebremoting.event.ScriptSessionListener; public class DWRScriptSessionListener implements ScriptSessionListener { //維護一個Map key爲session的Id, value爲ScriptSession對象 public static final Map<String, ScriptSession> scriptSessionMap = new HashMap<String, ScriptSession>(); /** * ScriptSession建立事件 */ public void sessionCreated(ScriptSessionEvent event) { WebContext webContext = WebContextFactory. get(); HttpSession session = webContext.getSession(); ScriptSession scriptSession = event.getSession(); scriptSessionMap.put(session.getId(), scriptSession); //添加scriptSession System. out.println( "session: " + session.getId() + " scriptSession: " + scriptSession.getId() + "is created!"); } /** * ScriptSession銷燬事件 */ public void sessionDestroyed(ScriptSessionEvent event) { WebContext webContext = WebContextFactory. get(); HttpSession session = webContext.getSession(); ScriptSession scriptSession = scriptSessionMap.remove(session.getId()); //移除scriptSession System. out.println( "session: " + session.getId() + " scriptSession: " + scriptSession.getId() + "is destroyed!"); } /** * 獲取全部ScriptSession */ public static Collection<ScriptSession> getScriptSessions(){ return scriptSessionMap.values(); } }
package sugar.dwr; import org.directwebremoting.impl.DefaultScriptSessionManager; public class DWRScriptSessionManager extends DefaultScriptSessionManager { public DWRScriptSessionManager(){ //綁定一個ScriptSession增長銷燬事件的監聽器 this.addScriptSessionListener( new DWRScriptSessionListener()); System. out.println( "bind DWRScriptSessionListener"); } }
<init-param> <param-name >org.directwebremoting.extend.ScriptSessionManager </param-name> <param-value >sugar.dwr.DWRScriptSessionManager </param-value> </init-param>
//獲得全部ScriptSession Collection<ScriptSession> sessions = DWRScriptSessionListener.getScriptSessions();
//執行推送 Browser.withAllSessionsFiltered(filter, run); //注意這裏調用了有filter功能的方法
public void send(final String content){ //過濾器 ScriptSessionFilter filter = new ScriptSessionFilter() { public boolean match(ScriptSession scriptSession) { String tag = (String)scriptSession.getAttribute("tag" ); System. out.println(tag); return "receiverTag" .equals(tag); } }; Runnable run = new Runnable(){ private ScriptBuffer script = new ScriptBuffer(); public void run() { //設置要調用的 js及參數 script.appendCall( "show", content); //獲得全部ScriptSession Collection<ScriptSession> sessions = DWRScriptSessionListener.getScriptSessions(); //遍歷每個ScriptSession for (ScriptSession scriptSession : sessions){ scriptSession.addScript( script); } } }; //執行推送 Browser. withAllSessionsFiltered(filter, run); //注意這裏調用了有filter功能的方法 }
public void onPageLoad(final String tag){ //獲取當前的ScriptSession ScriptSession scriptSession = WebContextFactory.get().getScriptSession(); scriptSession.setAttribute( "tag", tag); System. out.println( "setAttribute"); }
<script type= "text/javascript"> //這個方法用來啓動該頁面的ReverseAjax功能 dwr.engine.setActiveReverseAjax( true); //設置在頁面關閉時,通知服務端銷燬會話 dwr.engine.setNotifyServerOnPageUnload( true); var tag = "receiverTag"; //自定義一個標籤 messagePush.onPageLoad(tag); //這個函數是提供給後臺推送的時候 調用的 function show(content){ $( "#content").text(content); } </script >