chenmu736 发表于 2022-7-1 16:39

javaweb聊天室该怎么实现私聊功能

最近在网上学习javaweb在线聊天室的项目,原本的项目只是将聊天内容发到公屏上,现在想修改下,实现两个人之间的聊天记录不会被第三个人在公屏上看到。
原本设想就是加个判断用户姓名是否正确之后才显示,但是无法实现,所以想请大家看看。
主页面jsp部分代码:
// 显示聊天的内容
function showContent(){
   $.post("${pageContext.request.contextPath}/user?"+new Date().getTime(),{'method':'getMessage'},function(data){
      $("#content").html(sysBBS+data);
   });
}//发送聊天信息function send(){
   if(form1.to.value==""){
      alert("请选择聊天对象!");
      return false;
   }
   if(form1.content.value==""){
      alert("发送信息不可以为空!");
      form1.content.focus();
      return false;
   }
   // if(form1.to.value=="所有人")
   // {
      $.post("${pageContext.request.contextPath}/user?"+new Date().getTime(),$("#form1").serialize(),function(data){
         $("#content").html(sysBBS+data+"</span>");
      });
      $("input[name='content']").val("").focus();
   // }
}
部分Servlet的代码:public String sendMessage(HttpServletRequest req, HttpServletResponse resp) throws IOException {
      // 1.接收数据 。
      System.out.println("sendMessage invoke....");
      String from = req.getParameter("from"); // 发言人
      String face = req.getParameter("face"); // 表情
      String to = req.getParameter("to"); // 接收者
      String color = req.getParameter("color"); // 字体颜色
      String content = req.getParameter("content"); // 发言内容
      String sendTime = new Date().toLocaleString(); // 发言时间
      // 获得ServletContext对象.
      ServletContext application = getServletContext();
      //从ServletContext中获取消息
      String sourceMessage = (String) application.getAttribute("message");
      // 拼接发言的内容:xx 对 yy 说 xxx
//      sourceMessage += "<font color='blue'><strong>" + from
//                + "</strong></font><font color='#CC0000'>" + face
//                + "</font>对<font color='green'>[" + to + "]</font>说:"
//                + "<font color='" + color + "'>" + content + "</font>("
//                + sendTime + ")<br>";

      sourceMessage +=from + face + " 对 " + to + " 说" + content + "" + sendTime +"<br>";
      // 将消息存入到application的范围
      application.setAttribute("message", sourceMessage);
      application.setAttribute("from",from);
      application.setAttribute("towho",to);
      User sourceMess = new User();
      sourceMess.setUsername(from);
      sourceMess.setTousername(to);
      sourceMess.setContext(content);
      sourceMess.setTime(sendTime);
      UserService us = new UserService();
      us.sourceMess(sourceMess);
      return getMessage(req,resp);
    }
    /**
   * 获取消息的方法
   *
   * @throws IOException
   */
    public String getMessage(HttpServletRequest req, HttpServletResponse resp) throws IOException {
      String message = (String) getServletContext().getAttribute("message");
      String sendername = (String) getServletContext().getAttribute("from");
      String acceptername = (String) getServletContext().getAttribute("towho");
      if (message != null ){
            resp.getWriter().println(message);
      }
      return null;
    }

三滑稽甲苯 发表于 2022-7-1 17:25

最好不要用用户名判断,万一人家名字一样就不好了

hy_cicada 发表于 2022-7-1 17:30

用用户ID来判断,这样就不会出现重复了

jmfjmf 发表于 2022-7-1 19:04

chenmu736 发表于 2022-7-2 08:56

hy_cicada 发表于 2022-7-1 17:30
用用户ID来判断,这样就不会出现重复了

有道理我去试试

xiadongming 发表于 2022-7-3 08:14

页: [1]
查看完整版本: javaweb聊天室该怎么实现私聊功能