我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 项目源码 > javaWeb聊天室简单例子(可私聊)
总共48086条微博

动态微博

查看: 4111|回复: 3

javaWeb聊天室简单例子(可私聊)

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2014-10-18 20:10:37 |只看该作者 |倒序浏览
    在下根据网上的相关资料,摸索着写了一个DWR框架推模式的小聊天室,可实现私聊功能。
    " {) v9 D) \. R& ^4 @5 V& H功能基本正常,但是偶尔会出现信息显示不同步的问题,现将源码奉上,希望各位高手能指点一二。ChatManager.java0 Q  B' m2 V) R- H( w$ @! d
    $ D5 b2 _0 _' s  P
    1. package services;
      ! V6 y5 c, H- w" ~! ?$ d
    2. - ?0 S4 o; N0 T, [# D
    3. import java.util.ArrayList;
      9 Z" M! U# E$ S% |4 M- o
    4. import java.util.Collection;9 T$ u) X% t) ?7 s# E
    5. import java.util.List;
      0 f5 v: r$ b7 P$ m' _4 Z+ r- [
    6. + J$ M2 B9 P5 }
    7. import javax.servlet.http.HttpServletRequest;
      ) A. I' R% ^" ]+ {( m9 Q/ S& V
    8. import javax.servlet.http.HttpSession;5 E" l' K  w- q; n0 ?, c
    9. & h& o0 g( |0 j; t: `. {
    10. import org.directwebremoting.ScriptSession;2 h2 J) h/ ~6 ]7 g. {
    11. import org.directwebremoting.WebContext;
      % `; U$ D4 K; W8 U
    12. import org.directwebremoting.WebContextFactory;
      + d  J- Q4 o# F6 R2 V8 X8 r' L3 ]
    13. import org.directwebremoting.proxy.dwr.Util;$ U' s, N8 M9 y
    14. 4 |2 O" e5 ~( W$ @  j
    15. import pojo.MessageInfo;
      ; z  T: F' Y7 s3 _; R
    16. import pojo.UserInfo;
      $ ?! }3 S% E; ?3 b$ k! X

    17. 2 p5 C, K7 D! g0 F/ J1 T
    18. public class ChatManager {, Y9 C% L7 U. V6 F2 _( B
    19.         public static List<UserInfo> onlineUsersList=new ArrayList<UserInfo>();6 ~2 ~/ t2 G- G' l7 J
    20.         public static List<UserInfo> sendUserList=new ArrayList<UserInfo>();% \  k# h9 u* S
    21.         public static List<MessageInfo> messageList=new ArrayList<MessageInfo>();
      ' [5 ?" _; \+ i- s
    22.         public ChatManager(){
      - S/ H+ c( k; f7 O
    23.                 UserInfo userInfo = new UserInfo("0","所有人");% l) m, w% F: G* v6 q7 P4 u
    24.                 sendUserList.add(userInfo);- G" S& U9 v* n  \# d  a1 G
    25.         }
      $ {# C6 a$ @3 Y6 T, V/ l/ @" J4 J8 @$ p
    26.        
        C. A& Y' ?8 Y- j
    27.         public String updateOnlineUsers(String userName,boolean flag) {' W. N4 i$ e( j6 m1 Q9 S
    28.                 UserInfo userInfo=null;
      ) q" o# w2 |9 b* O0 A
    29.                 WebContext context=WebContextFactory.get();
      # M8 ]: W6 e- t& F' R/ F
    30.                 HttpSession session = context.getSession();
      2 ]: O2 A+ Y7 F. Z7 j4 i: h) k+ X+ A
    31.                 if (flag) {; s- o6 T+ o) s& o' J8 G) t8 I
    32.                         userInfo = new UserInfo(session.getId(),userName);
        b5 f9 q( v. P& I7 H$ r
    33.                         onlineUsersList.add(userInfo);
      3 X6 P: b2 H7 w5 D/ {/ t
    34.                         sendUserList.add(userInfo);$ u, H& M, T; ~2 |: L. k
    35.                         this.setScriptSessionFlag(userInfo);3 I9 L2 A7 K, i# o- ~
    36.                 }
      5 S3 ]; E; {) ]
    37.                 String currentPage = "/chat/index.jsp";% X" |( _" F! d6 G
    38.                 Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
      3 B7 W6 }0 K9 T) u! G2 O, d
    39.                 Util allPageUtil = new Util(sessionsByPage);5 [3 o! k% _. ~; V
    40.                 allPageUtil.removeAllOptions("onlineList");
      0 j2 G% G3 c5 o' {
    41.                 allPageUtil.addOptions("onlineList", onlineUsersList, "userName");4 f0 o- r; \) q
    42.                 allPageUtil.removeAllOptions("userList");
      % s' t* ^7 I: w; [" [
    43.                 allPageUtil.addOptions("userList", sendUserList, "userId", "userName");
      ' J6 F( _. g9 c! l( d" P
    44.                 if (!flag) {
      ) T, E# O* E* @. X2 j2 ]' f. g
    45.                         return null;; K: z2 p7 D% j% e% K
    46.                 }
      6 H1 X* ?) J" {/ W4 J/ I4 o
    47.                 return userInfo.getUserId();0 P) v/ ?/ {  }! ]* d1 {
    48.         }6 A: O& ~# E3 Z
    49.        
      4 L. w, z) A/ Q1 \0 k
    50.         public void setScriptSessionFlag(UserInfo userInfo) {9 [- n. R7 N, [: Z" a' U
    51.                 WebContextFactory.get().getScriptSession().setAttribute("userInfo", userInfo);* M; B1 u0 _5 `5 j# g! w+ N% U7 ^
    52.         }
      " P, [! q; n2 i& J  ]6 s7 i
    53.         + S/ A8 [2 j! `( P0 H3 z; U. j
    54.         public Collection<ScriptSession> getScriptSessionFlag(String userId) {
      ; H+ j4 z5 g4 H% S1 {5 X
    55.                 Collection<ScriptSession> list=new ArrayList<ScriptSession>();
      ' {* }6 K$ D. l1 a! V% V8 M
    56.                 Collection<ScriptSession> sessions=new ArrayList<ScriptSession>();
      " L- ], S4 B/ f! G% D( w
    57.                 WebContext context = WebContextFactory.get();
      ! |. z5 r  u4 t% `1 K: L7 U  I. K
    58.                 String currentPage = "/chat/index.jsp";
      + y3 W# |3 Y  I9 Y' d
    59.                 Collection sessionsByPage = context.getScriptSessionsByPage(currentPage);
      ! {& O2 `6 t7 ^7 e
    60.                 sessions.addAll(sessionsByPage);+ H4 S) J/ V6 Q; H) I5 |
    61.                 if ("0".equals(userId)) {
      $ B' k$ ?" D* E( s* N3 @
    62.                         list=sessions;/ Q; R  X  F% n% B9 C
    63.                 }else{7 P. v  ^  Q* k! R2 |- l- p
    64.                         for (ScriptSession session : sessions) {
      % g2 \5 @* u" F  @: f% \! V7 c4 |
    65.                                 UserInfo userInfo=(UserInfo) session.getAttribute("userInfo");
      * P3 d5 p$ y" {; M' t9 `0 A
    66.                                 if (userId.equals(userInfo.getUserId())) {
      * @8 Q4 W! |& q# u' g
    67.                                         list.add(session);
      3 U4 `; q# v; j9 @* Q
    68.                                         break;
      0 H, W* d0 F: e* ~/ j. Y' U/ D: i
    69.                                 }, v# A4 \9 ?; e) ~
    70.                         }6 ?0 }! y* r9 R1 X, p
    71.                 }9 A4 M% f0 [8 _0 z+ n  [
    72.                 return list;
      : B0 p6 |& K& h; c
    73.         }
      4 A, Z* b/ \6 e, l% b& ?- g) C
    74.        
      8 F* T" l) g# ^  Q' y7 H% D- H9 }
    75.         public void sendMessage(String sender,String receiverId,String msg) {
      % L# _. a% P+ @
    76.                 Collection<ScriptSession> scriptSessionFlag = this.getScriptSessionFlag(receiverId);
      - o: Z& r# n$ C/ ]' o
    77.                 MessageInfo messageInfo = new MessageInfo(sender,receiverId,msg);; u5 P7 A8 ~# m4 l' u: K
    78.                 messageList.add(messageInfo);
      : L( F" m" V& z
    79.                 Util receiverUtil = new Util(scriptSessionFlag);, b9 d1 h* c3 f! X; A7 I: [
    80.                 receiverUtil.removeAllOptions("messageList");& s6 [9 _: f! m: Z9 x* x
    81.                 receiverUtil.addOptions("messageList", messageList, "msg");) @* |1 s" f* h" ~
    82.         }
      ( X; ^: {& l0 L# `
    83. }( _& O, `+ h1 o6 T% c' M; V
    复制代码
    * U6 F9 J5 _5 K: l2 Y
    项目源码下载地址:点击下载
    + }. B& |/ Q, G. m3 X5 f2 V& ]* c

    4 v' W' m8 g* D% l7 q( k3 V, Z, t

    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    1

    主题

    0

    听众

    93

    金钱

    三袋弟子

    该用户从未签到

    沙发
    发表于 2015-06-19 10:53:35 |只看该作者
    谢谢楼主分享
    回复

    使用道具 举报

    1

    主题

    0

    听众

    93

    金钱

    三袋弟子

    该用户从未签到

    板凳
    发表于 2015-06-19 10:54:20 |只看该作者
    呃,楼主分享链接失效了
    3 Q! ?' T, J+ |; S1 z7 d5 H
    回复

    使用道具 举报

    woniu 实名认证   

    2

    主题

    0

    听众

    330

    金钱

    四袋长老

    该用户从未签到

    地板
    发表于 2016-04-12 12:05:28 |只看该作者
    这个项目太棒勒!下下来学习下!
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表