首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Spring + DWR Comet 實現無刷新多人聊天室(三):領域模型、業務事件與服務層實現

     編輯:J2EE

領域模型:Message 實體

package com.hoo.entity;

import java.util.Date;

public class Message {
    private int id;
    private String msg;
    private Date time;
    // Getter/Setter 省略
}

業務事件:ChatMessageEvent

package com.hoo.chat;

import org.springframework.context.ApplicationEvent;

public class ChatMessageEvent extends ApplicationEvent {
    private static final long serialVersionUID = 1L;

    public ChatMessageEvent(Object source) {
        super(source); // source 為 Message 實例
    }
}
  • 繼承 ApplicationEvent,攜帶 source (Message) 傳遞給監聽器;
  • Spring 事件機制:ApplicationContext.publishEvent() 發布 → 所有 ApplicationListener 接收。

服務層:ChatService — 客戶端調用入口,發布事件

package com.hoo.chat;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import com.hoo.entity.Message;

public class ChatService implements ApplicationContextAware {

    private ApplicationContext ctx;

    public void setApplicationContext(ApplicationContext ctx) throws BeansException {
        this.ctx = ctx;
    }

    public void sendMessage(Message msg) {
        // 發布業務事件,觸發 ChatMessageClient.onApplicationEvent()
        ctx.publishEvent(new ChatMessageEvent(msg));
    }
}

架構關係圖

[瀏覽器 chat.jsp]
      │ sendMessage(msg)
      ▼
[DWR Servlet] → [ChatService.sendMessage(Message)]
      │
      ▼
[ApplicationContext.publishEvent(ChatMessageEvent)]
      │
      ▼
[ChatMessageClient.onApplicationEvent] (ApplicationListener)
      │
      ├─ 獲取所有 ScriptSession (chat.jsp)
      └─ session.addScript(showMessage(...)) → 推送至瀏覽器

設計亮點

  1. 解耦:服務層無感知推送邏輯,僅發布領域事件;
  2. 擴展性:新增監聽器 (如持久化、審計、推送手機) 無需修改 ChatService;
  3. 類型安全:事件攜帶強類型 Message,避免 Map/JSON 解析錯誤;
  4. DWR 整合:ChatService 以 POJO 形式暴露,DWR 自動生成 JS Stub,前端調用如本地函數。

下一篇將展示監聽器實現與 Spring/DWR 容器整合配置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved