web.xml
<servlet> <servlet-name>dwr-invoke</servlet-name> <servlet-class> uk.ltd.getahead.dwr.DWRServlet </servlet-class> <init-param> <param-name> debug </param-name> <param-value> true </param-value> </init-param> <init-param> <!-- 这个是DWR2.0必须的,不然会报java.lang.IllegalArgumentException --> <param-name> classes </param-name> <param-value> java.lang.Object </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoke</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
在Web-INF下创建dwr.xml
1
2
3
4
5
6
7
8
9
10
11
12 |
<?xml version= "1.0"
encoding= "UTF-8" ?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
"http://getahead.org/dwr/dwr30.dtd" > <dwr> <allow> <convert match= "com.relonger.ccljent.entity.Message"
converter= "bean" > <!--javaBean--> <param name= "include"
value= "msg,time"
/> </convert> <create creator= "spring"
javascript= "ChatService" > <param name= "beanName"
value= "chatService"
/> </create> </allow> </dwr> |
ChatService 服务端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
public
class ChatService implements ApplicationContextAware { private
ApplicationContext ctx; @Override public
void setApplicationContext(ApplicationContext ctx) throws BeansException { this .ctx = ctx; } /** * <b>function:</b> 向服务器发送信息,服务器端监听ChatMessageEvent事件,当有事件触发就向所有客户端发送信息 * * @author hoojo * * @createDate 2011-6-8 下午12:37:24 * * @param msg * */ public
void sendMessage(Message msg) { //发布事件 ctx.publishEvent( new
ChatMessageEvent(msg)); }<br>} |
ChatMessageClient 客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 |
public
class ChatMessageClient implements ApplicationListener, ServletConfigAware { private
ServletContext ctx; public
ServletContext getCtx() { return
ctx; } public
void setCtx(ServletContext ctx) { this .ctx = ctx; } @Override public
void onApplicationEvent(ApplicationEvent event ) { //如果事件类型是ChatMessageEvent就执行下面操作 if
( event
instanceof ChatMessageEvent) { Message msg = (Message) event .getSource(); ServerContext context = ServerContextFactory. get (); //获得客户端所有chat页面script session连接数 if (ctx != null ){ System. out .print( "==========" ); } WebContext contex = WebContextFactory. get (); if (contex != null ){ System. out .print( "====>>>>>>>" ); } Collection<ScriptSession> sessions = context.getScriptSessionsByPage( "/DWR/chat.jsp" ); // Collection<ScriptSession> sessions = context.getScriptSessionsByPage(ctx.getContextPath() + "/chat.jsp"); for
(ScriptSession session : sessions) { ScriptBuffer sb = new
ScriptBuffer(); Date time = msg.getTime(); String s = time.getYear() + "-"
+ (time.getMonth() + 1) + "-"
+ time.getDate() + " " + time.getHours() + ":"
+ time.getMinutes() + ":"
+ time.getSeconds(); //执行setMessage方法 sb.appendScript( "showMessage({msg: ‘" ) .appendScript(msg.getMsg()).appendScript( "‘, time: ‘" ) .appendScript(s) .appendScript( "‘})" ); System. out .println(sb.toString()); //执行客户端script session方法,相当于浏览器执行JavaScript代码 //上面就会执行客户端浏览器中的showMessage方法,并且传递一个对象过去 session.addScript(sb); } } } @Override public
void setServletConfig(ServletConfig arg0) { // TODO Auto-generated method stub }<br>} |
原文:http://www.cnblogs.com/fengyu9/p/3630551.html