网络聊天室的相关问题 100C

刚学web编程,老师让写一个网络聊天室,发现诸多问题无法解决,在此询问诸位大神,万望搭救兄弟一把。
1.当A发送消息时,在他自己的页面中可以刷出自己的聊天信息来,B的页面没有显示,只有当B也发送一条信息后,A的聊天信息才会连同自己的一起显示。这是怎么回事?怎么解决?
2.怎么使得滚动条每发送一条信息就自动滚到最下方?
3.我用的是textarea显示聊天记录,怎么能显示用户的头像呢?(用户头像存储在了数据库中,在用户表里)
4.好友列表是用JSP写的,怎么能实时显示在线用户,即有人登陆即出现在好友列表中,有人下线即从好友列表中消失?
万望大神搭救。以下是聊天页面的代码:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import=" javax.servlet.http.HttpServletRequest"%>
<%@ page import=" javax.servlet.http.HttpServletResponse"%>
<%@ page import=" javax.servlet.http.HttpSession"%>
<%@ page import=" java.util.Date" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
#div2{
    position:absolute;
    top:10px;
    bottom:140px;
    left:10px;
    right:10px;
    width:95%;
    background:#F0F0F0;
}
#div1{
    position:absolute;
    bottom:10px;
    width:95%;
    height:100px;
    margin:0;
}
#text{
    margin:0;
    width:84%;
    padding:0;
    height:100px;
    float:left;
}
#text2{
    margin:0;
    width:100%;
    height:100%;
}
#button{
    margin:0;
    width:15%;
    padding:0;
    height:100px;
    float:right;
}
</style>


<script type="text/javascript">
function check(){
    if(document.getElementById("text").value.length==0){
        document.getElementById("text").value="聊天记录不能为空";
        return false;
    }
    else{
        localtion.reload();
        return true;
    }   
}

</script>
</head>
<body>
<%
    request.setCharacterEncoding("UTF-8");
    String chat=request.getParameter("text"); 
    String chats=(String)application.getAttribute("chat");
    if(chat!=null){
        chat=new String(chat.getBytes("ISO-8859-1"),"UTF-8");
        String username;
        HttpSession session1=request.getSession();
        if(session1.getAttribute("username")!=null){
            username=(String)session1.getAttribute("username");
        }
        else username="游客";
        Date d=new Date();
        chat=username+"    "+d.toLocaleString()+"\r\n"+chat; 
        if(chats==null)
            chats=chat;
        else chats=chats+"\r\n"+"\r\n"+chat;
    }
    if(chats!=null)
        application.setAttribute("chat", chats);%>
        <div id="div2"><textarea id="text2" ><%out.println(application.getAttribute("chat"));%></textarea></div>
<form name="form1" id="form1" method="get" action="chatting.jsp" onsubmit="return check()">
    <div id="div1">
        <div><textarea rows="6" cols="10" id="text" name="text"></textarea></div>
        <div><input type="submit" id="button" name="button" value="发言"></div>
    </div>
</form>
</body>
</html>

2个回答

1.关于用户头像的问题可以在传过来信息的时候,把id传过来,在这边用ajax去后台访问数据库,查询图片,在前面用EL表达式接收就可以了.
2.如果要是想让B也获得最新的消息,可以设置页面的刷新时间为1s,request.setHeader(),里面的参数忘了,可以去百度查一下
3. 用户上下线问题,可以使用session,用户上线给session设置一个变量,存储在里面,在页面判断如果用户退出,那么就可以移除这个session,一旦这个session没了,就可以删除了.
大概是这样的思路,希望可以帮到你

qq_33250066
该用户不会起名 首先感谢你能回答我的问题。 1.我知道ajxa可以用来传值,但不知道具体怎么来传输图片,你能具体讲一讲吗?因为ajxa是我在做这个项目的时候自学了一点,并不深入。 2.我原来使用的就是每隔一定时间刷新一下,但是这样造成的结果是聊天记录会有很明显的闪动现象,你能有更好的方法吗? 3.我只知道怎么get session,不清楚移除session的方法。而且我记得老师讲过session在用户关闭网页后会自动清除。但是这里也存在一个实时问题,是否我也需要不停刷新?但这样也会造成严重的闪动啊
大约 3 年之前 回复

web聊天室,即时性的确是个很头疼的问题。目前很多都是采用web端时时刷新的,这样实现比较简单。但对服务器的压力比较大。如果你这个只是个毕业设计的话,建议你采用Web端局部刷新的方式就比较好。采用异步请求,每次对请求的数据进行按时间排序就可以了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐