一个困扰我许多天的问题拜托了(聊天室)

123cfdi 2002-05-22 06:12:06
本人作了一个聊天室,一个主页面chatframa.jsp,发言页面say.jsp,传输信息页面send.jsp,显示页面mai.jsp。chatfram.jsp是一个框架,上部显示信息,下部发言。但是当我按“发言”按钮时,框架上部显示不出信息。下面是send.jsp中存储信息的一段程序:String words=("<font color="+color+">"+user+"</font>"+action+"对<font color="+color+">"+sayto+"</font>说:<font color="+color+">"+word+"</font>");
Vector msg=new Vector();
msg.addElement(words);
getServletContext().setAttribute("msg",msg);
Vector user_table=new Vector();
user_table.addElement("user");
getServletContext().setAttribute("user_table",user_table);

msg=(Vector)getServletContext().getAttribute("msg");
我想知道存储在"application"中的"words"怎么被"mai.jsp接收到,使他能在"chatfram.jsp"中显示。下面是"mai.jsp"的一段程序: msg.addElement("<font color='red'>"+user+"来了,大家好好的对他哦.</font>");

getServletContext().setAttribute("msg",msg);
msg=(Vector)getServletContext().getAttribute("msg");
for (int i=msg.size();i>0; i--)
{
out.print(msg.elementAt(i-1));
out.print("<br>");

}请多指教!
...全文
5 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andrawu 2002-05-23
没有错误信息吗?还是程序没有错误,只是信息显示不对呢?
你说得不是很清楚。
回复
123cfdi 2002-05-23
我试过了,但是框架上仍没有信息,而且,当我按“提交按钮后,输入的信息仍然停留输入信息的栏上, 怎么办?
回复
123cfdi 2002-05-23
我安装的运行环境为JRUN3.0,JDK1.3,编辑器:Editplus2(3)
回复
123cfdi 2002-05-23
让您费心了!
newapparticipant.html(进入聊天室)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Star Chatroom </TITLE>
</HEAD>

<BODY bgcolor="#fffooo" >
<center>
<font size=+3>
<b><i>豆豆</i> 聊天室</b>
<br><br>
</font>
</center>
<font size=+0>
欢迎光临<b><i>豆豆</i></b>聊天室,
<br>
请选择您的称呼,然后单击<b><i>加入</i></b>
</font>
<br>
<center>
<form name="newuser" method=post action="chu.html">
<b>称呼</b>
<input name="username" type="text" maxlength="9" >
<br>
<input type="submit" name="submit" value="加入">
</form>
</center>
</BODY>
</HTML>


chu.jsp(初始化)
<%@ page import="java.util.Vector"%>
<%@ page import="java.util.*"%>
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<%
String user=request.getParameter("user");
Vector user_list=new Vector();
user_list=(Vector)getServletContext().getAttribute("user_list");
if(user_list==null)
user_list=new Vector();
boolean have=false;
int i;
for(i=0;i<user_list.size();i++)
{
if(user.equals(user_list.elementAt(i)))
have=true;
}
if(!have)
{
user_list.addElement(user);
getServletContext().setAttribute("user_list",user_list);
}
Vector msg=new Vector();
msg=(Vector)getServletContext().getAttribute("msg");
if(msg==null)
msg=new Vector();
msg.addElement("<font color='red'>"+user+"来了,大家好好的对他哦.</font>");
getServletContext().setAttribute("msg",msg);
response.sendRedirect("chatframa.html");
%>
</html>


saya.jsp(发言部分)
<%@ page contentType="text/html;charset=gb2312"%>

<html>
<head>
<title>发言区</title>
<meta http-equiv="Content-Type" Content="text/html;charset=gb2312">
<link rel="stylesheet" href="../shop.css" type="text/css">
<script language="javascript">
function bs(){
document.forms.forml.word.style.color=document.forms.forml.color.value;
document.forms.forml.word.focus();
}
function check_word()
{
if(forml.word.value=="")
{
document.forms.forml.word.focus();
alert("请不要发送空信息!");
return false;
}
return true;
}
</script>
</head>
<body bgcolor="#33ccff" text="#000000" leftmargin="0"topmargin="3"onload='document.forms.forml.word.focus();'>
<form name="forml" method="post" action="senda.jsp"target="up"onsubmit="return check_word();">
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="89%">发言内容
<input type="text" name="word" size="50">
<input type="submit" name="Submit" value="发言">
</td>
<td width="11%">
<Iframe name="say" height=0 width=0 src="mai.jsp"></Iframe></td>
</tr>
<tr>
<td width="89%">昵称
<input type=hidden name="nickname">
<input type="text" name="user"size="5">
对象
<input type="hidden" name="sayto" size="6" value="大家">
<input type="text" name="saytobax" size="6" value="大家"onfocus="blur()">
动作
<select name="action" size="1">
<option selected value="叫嚷着">叫嚷</option>
<option value="说话">说话</option>
<option value="拥抱">拥抱</option>
</select>
趣语
<select onchange="word.value=this.value;top.bottom.forml.word.focus();"style="font-size:9pt">
<option value selected>没有</option>
<option value="举双脚赞成">赞成</option>
<option vslue="抓了抓头皮,露出迷惑的表情">迷惑</option>
</select>
字体颜色
<select name='color' id='color' onchange='bs();'>
<option style="color:#000000" value="000000" selected>绝对黑色</option>
<option style="color:#000088"value="000088">深蓝忧郁</option>
</select>
</td>
</tr>
</table>
</form>
</body>
</html>


senda.jsp(传输部分)
<%@ page session="true"%>
<%@ page language="java"%>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Vector"%>

<%


String user=request.getParameter("user");

String word=request.getParameter("word");

String action=request.getParameter("action");
if(action==null)
action="";
String color=request.getParameter("color");
if(color==null)
color="#000000";
String sayto=request.getParameter("sayto");
if(sayto==null)
sayto="大家";

String words=("<font color="+color+">"+user+"</font>"+action+"对<font color="+color+">"+sayto+"</font>说:<font color="+color+">"+word+"</font>");
Vector msg=new Vector();
getServletContext().setAttribute("msg",msg);
msg.addElement(words);
msg=(Vector)getServletContext().getAttribute("msg");
Vector user_table=new Vector();
getServletContext().setAttribute("user_table",user_table);
user_table.addElement("user");
user_table=(Vector)getServletContext().getAttribute("user");
out.print(msg);
%>
<script language="javascript">
top.bottom.forml.word.value="";
top.bottom.forml.word.focus();
</script>

mai.jsp(显示部分)
<%@ page session="true"%>
<%@ page language="java"%>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Vector"%>
<html>
<head>
<title>聊天窗口</title>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
<%
Vector msg=new Vector();
msg=(Vector)getServletContext().getAttribute("msg");
for (int i=msg.size();i>0; i--)
{
out.print(msg.elementAt(i-1));
out.print("<br>");

}
%>
</body>
</html>

user_list.jsp(用户列表部分)
<%@ page import="java.util.Vector"%>
<html>
<head>
<title>用户窗口</title>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">

</head>
<b> 在线聊友<b>

<%
Vector user_table=new Vector();
user_table.addElement("所有人");
getServletContext().setAttribute("user_table",user_table);
user_table=(Vector)getServletContext().getAttribute("user_table");
int i;
for(i=0;i<user_table.size();i++)
{
String user=(String)user_table.elementAt(i);
out.print(">><a href=javascript:saytobax('"+user+"');>");
out.print(user);
out.print("</a><<");
}
%>
























回复
Andrawu 2002-05-23
收到了。
回复
saintKnight 2002-05-23
其实这里的Vector msg应定义成全局变量也就是application范围的变量,每次用户发言的信息通过msg.addElement()加入到已经存在的对象变量中,而你的程序好象是每次发言后都新建了一个Vector msg对象,所以将以前的信息给覆盖了。不知讲的对不对,你再调试一下吧
回复
saintKnight 2002-05-23
Vector msg=new Vector();
getServletContext().setAttribute("msg",msg);
msg.addElement(words);
这段代码好象每次发言都会将以前的信息给覆盖了吧?
因为每次都将msg名称的属性都赋成新的值msg。
回复
123cfdi 2002-05-23
我一









我已把代码发送给你
回复
Andrawu 2002-05-23
你的代码不完全,你把你的全部代码zip后,发给我吧。
andrawu@hotmail.com
回复
Andrawu 2002-05-23
行,我帮你调试。
回复
123cfdi 2002-05-23
mai.jsp页面刷新了也没有用,我是过
回复
123cfdi 2002-05-23
没有错误信息。你一定去过聊天室吧,我想要的效果是:在页面下的信息栏里输入信息,按下"submit"按钮后,同时能在该页面的上面看到新输入的信息和以前的信息。问题是:我只能看到新输入的信息。下面是源程序代码:如果问题解决,我将仅有的分全部奉上。
chatframa.jsp
<%@ page session="true"%>
<%@ page langue="javaScript"%>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Vector"%>
<%@ page import="java.util.*"%>
<HTML>
<HEAD>
<title>Frames</title>
</HEAD>

<FRAMESET COLS="85,15">
<FRAMESET ROWS="80%,20%" >
<FRAME SRC="senda.jsp" name="up" scrolling="yes">
<FRAME SRC="saya.jsp" name="dowm" scrolling="yes" >
</FRAMESET>
<FRAMESET ROWS="70%">
<FRAME SRC="user_list.jsp" name="left" scrolling="auto">
</FRAMESET>
</FRAMESET>
</HTML>


saya.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>发言区</title>
<meta http-equiv="Content-Type" Content="text/html;charset=gb2312">
<link rel="stylesheet" href="../shop.css" type="text/css">
<script language="javascript">
function bs(){
document.forms.forml.word.style.color=document.forms.forml.color.value;
document.forms.forml.word.focus();
}
function check_word()
{
if(forml.word.value=="")
{
document.forms.forml.word.focus();
alert("请不要发送空信息!");
return false;
}
return true;
}
</script>
</head>
<body bgcolor="#33ccff" text="#000000" leftmargin="0"topmargin="3"onload='document.forms.forml.word.focus();'>
<form name="forml" method="post" action="senda.jsp"target="up"onsubmit="return check_word();">
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="89%">发言内容
<input type="text" name="word" size="50">
<input type="submit" name="Submit" value="发言">
</td>
<td width="11%">
<Iframe name="say" height=0 width=0 src="senda.jsp"></Iframe></td>
</tr>
<tr>
<td width="89%">昵称
<input type=hidden name="nickname">
<input type="text" name="user"size="5">
对象
<input type="hidden" name="sayto" size="6" value="大家">
<input type="text" name="saytobax" size="6" value="大家"onfocus="blur()">
动作
<select name="action" size="1">
<option selected value="叫嚷着">叫嚷</option>
<option value="说话">说话</option>
<option value="拥抱">拥抱</option>
</select>
趣语
<select onchange="word.value=this.value;top.bottom.forml.word.focus();"style="font-size:9pt">
<option value selected>没有</option>
<option value="举双脚赞成">赞成</option>
<option vslue="抓了抓头皮,露出迷惑的表情">迷惑</option>
</select>
字体颜色
<select name='color' id='color' onchange='bs();'>
<option style="color:#000000" value="000000" selected>绝对黑色</option>
<option style="color:#000088"value="000088">深蓝忧郁</option>
</select>
</td>
</tr>
</table>
</form>
</body>
</html>



senda.jsp
<%@ page session="true"%>
<%@ page language="java"%>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Vector"%>

<%


String user=request.getParameter("user");

String word=request.getParameter("word");

String action=request.getParameter("action");
if(action==null)
action="";
String color=request.getParameter("color");
if(color==null)
color="#000000";
String sayto=request.getParameter("sayto");
if(sayto==null)
sayto="大家";

String words=("<font color="+color+">"+user+"</font>"+action+"对<font color="+color+">"+sayto+"</font>说:<font color="+color+">"+word+"</font>");
Vector msg=new Vector();
getServletContext().setAttribute("msg",msg);
msg.addElement(words);
msg=(Vector)getServletContext().getAttribute("msg");
Vector user_table=new Vector();
getServletContext().setAttribute("user_table",user_table);
user_table.addElement("user");
user_table=(Vector)getServletContext().getAttribute("user");
out.print(msg);
%>
<script language="javascript">
top.bottom.forml.word.value="";
top.bottom.forml.word.focus();
</script>


maia.jsp
<%@ page session="true">
<%@ page language="java"%>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Vector"%>
<html>
<head>
<title>聊天窗口</title>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">

</head>

<%
Vector msg=new Vector();
msg=(Vector)getServletContext().getAttribute("msg");
for (int i=msg.size();i>0; i--)
{
out.print(msg.elementAt(i-1));
out.print("<br>");

}
%>
</body>
</html






















回复
saintKnight 2002-05-23
mai.jsp页面刷新了没有?
回复
Andrawu 2002-05-22
1、
String words=("<font color="+color+">"+user+"</font>"+action+"对<font color="+color+">"+sayto+"</font>说:<font color="+color+">"+word+"</font>");
Vector msg=new Vector();
msg.addElement(words);
getServletContext().setAttribute("msg",msg);
Vector user_table=new Vector();
user_table.addElement("user");
getServletContext().setAttribute("user_table",user_table);

以上代码中的msg.addElement(words);只保存words变量中值,因为你重新实例化了一个Vector msg=new Vector();你的user_table也是一样的。
你应该先用
Vector msg=new Vector();
msg = getServletContext().getAttribute("msg");
msg.addElement(words);
getServletContext().setAttribute("msg",msg);
Vector user_table=new Vector();
user_table = getServletContext().getAttribute("user_table");
user_table.addElement("user");
getServletContext().setAttribute("user_table",user_table);

2、
getServletContext().setAttribute("msg",msg);
msg=(Vector)getServletContext().getAttribute("msg");
for (int i=msg.size();i>0; i--)
{
out.print(msg.elementAt(i-1));
out.print("<br>");

你也应该:
Vector msg=new Vector();
msg = getServletContext().getAttribute("msg");
for (int i=msg.size();i>0; i--)
{
out.print(msg.elementAt(i-1));
out.print("<br>");
}


回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告