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