dwr推送消息+springmvc

加入dwr3.0.jar包
Web.xml配置:
1.  
2.  
3.        dwr-invoker  
4.  
5.          
6.  
7.            org.directwebremoting.servlet.DwrServlet  
8.  
9.        
 
10.  
11.          
12.  
13.            crossDomainSessionSecurity  
14.  
15.               false  
16.  
17.            
 
18.  
19.          
20.  
21.          allowScriptTagRemoting  
22.  
23.          true  
24.  
25.        
 
26.  
27.          
28.  
29.          classes  
30.  
31.          java.lang.Object  
32.  
33.        
 
34.  
35.          
36.  
37.            activeReverseAjaxEnabled  
38.  
39.            true  
40.  
41.        
 
42.  
43.          
44.  
45.           initApplicationScopeCreatorsAtStartup  
46.  
47.           true  
48.  
49.        
 
50.  
51.          
52.  
53.            maxWaitAfterWrite  
54.  
55.            3000  
56.  
57.        
 
58.  
59.          
60.  
61.            debug  
62.  
63.            true  
64.  
65.        
 
66.  
67.          
68.  
69.            logLevel  
70.  
71.            WARN  
72.  
73.        
 
74.  
75.    
 
Dwr.xml配置
1. 2.     "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"  
3.     "http://getahead.org/dwr/dwr30.dtd">  
4.  
5.  
6.      
7.            
8.              
9.        
 
10.            
11.              
12.        
 
13.    
 
14.
 
要推送的页面,onload是初始化页面的时候加载dwr配置,userid会传入到后台MessagePush().onPageLoad(userId)方法里
1.
2.  
3.  
4.    
5.    
6.  
7.    
20.     
21.    This is my DWR DEOM page.
 
22.    
 
23.    
demo
 
24.    
25.  


建立MessagePush.java
1. public class MessagePush{
2.   public void onPageLoad(String userId) {  
3.  
4.       ScriptSession scriptSession = WebContextFactory.get().getScriptSession();  
5.  
6.       scriptSession.setAttribute(userId, userId);  
7.  
8.       DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();  
9.  
10.       try {  
11.  
12.              dwrScriptSessionManagerUtil.init();  
13.              System.out.println("cacaca");  
14.  
15.       } catch (ServletException e) {  
16.  
17.              e.printStackTrace();  
18.  
19.       }  
20.  
21. }  
DwrScriptSessionManagerUtil().init()这个方法会获得你的session里的值
1. public class DwrScriptSessionManagerUtil extends DwrServlet{  
2.  
3.    private static final long serialVersionUID = -7504612622407420071L;  
4.  
5.    public void init()throws ServletException {  
6.  
7.           Container container = ServerContextFactory.get().getContainer();  
8.           ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);  
9.           ScriptSessionListener listener = new ScriptSessionListener() {  
10.                  public void sessionCreated(ScriptSessionEvent ev) {  
11.                         HttpSession session = WebContextFactory.get().getSession();  
12.  
13.                         String userId =((User) session.getAttribute("userinfo")).getHumanid()+"";  
14.                         System.out.println("a ScriptSession is created!");  
15.                         ev.getSession().setAttribute("userId", userId);  
16.                  }  
17.                  public void sessionDestroyed(ScriptSessionEvent ev) {  
18.                         System.out.println("a ScriptSession is distroyed");  
19.                  }  
20.           };  
21.           manager.addScriptSessionListener(listener);  
22.    }  
23. }  
这个类的重点是showMessage函数,是指你要调用页面的那个js方法,后面跟的是参数,以逗号分割
1. public class Test{  
2.    public void sendMessageAuto(String userid, String message){  
3.          
4.        final String userId = userid;  
5.        final String autoMessage = message;  
6.        Browser.withAllSessionsFiltered(new ScriptSessionFilter() {  
7.            public boolean match(ScriptSession session){  
8.                if (session.getAttribute("userId") == null)  
9.                    return false;  
10.                else  
11.                    return (session.getAttribute("userId")).equals(userId);  
12.            }  
13.        }, new Runnable(){  
14.              
15.            private ScriptBuffer script = new ScriptBuffer();  
16.              
17.            public void run(){  
18.                  
19.                script.appendCall("showMessage", autoMessage);  
20.                  
21.                Collection sessions = Browser  
22.  
23.                .getTargetSessions();  
24.                  
25.                for (ScriptSession scriptSession : sessions){  
26.                    scriptSession.addScript(script);  
27.                }  
28.            }  
29.        });  
30.    }  
31. }  
被推送的jsp页面
1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
2. <%  
3. String path = request.getContextPath();  
4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
5. %>  
6.  
7.  
8.    
9.      
10.    My JSP 'MyJsp.jsp' starting page  
11.      
12.      
13.          
14.      
15.      
16.      
17.      
18.      
19.      
20.      
21.      
30.    
31.    
32.    
33.    id    :
 
34.     
35.      
36.      
37.    
38.  

你可能感兴趣的:(dwr推送消息+springmvc)