下面是教科书上的一个聊天室程序的服务器端,我想扩展它的功能,增加一个引导页面来显示聊天室中的总人数;请教大家应该如何修改?最好能给出引导页面的JSP代码。谢谢import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.ServletConfig;
import java.io.*;
import java.util.*;public class chatServlet extends HttpServlet implements Runnable{
private UserList users=new UserList();
private Message message;
private final static String defaultStartpage="localhost:8080/chat/chatApplet.jsp";
private Thread responseThread;
private static final int TIMEOUT=5*60*1000; //设置超时时间为5分钟

public void init(ServletConfig config)throws ServletException{
super.init(config);
int currPriority=Thread.currentThread().getPriority();
int newPriority;
if(currPriority==Thread.MIN_PRIORITY)
newPriority=Thread.MIN_PRIORITY;
else
newPriority=currPriority-1;
responseThread=new Thread(this,"ChatReaper ");
responseThread.setDaemon(true);
responseThread.setPriority(newPriority);
responseThread.start();
}

public void destroy(){
super.destroy();
if(responseThread!=null && responseThread.isAlive()){
responseThread=null;
}
}

public void service(HttpServletRequest rq,HttpServletResponse rp)throws IOException,ServletException{
String user,mode,usermsg;
//如果Servlet接收字符串为null,返回默认html页面
if(rq.getQueryString()==null){
if(getInitParameter("startpage")==null)
rp.sendRedirect(defaultStartpage);
rp.sendRedirect(getInitParameter("startpage"));
return;
}
//从Applet发出请求中获得用户名和请求模式
mode=rq.getParameter("mode");
user=rq.getParameter("user");
//mode没有设置,就返回
if(mode==null){
sendError(rp,"Mode not set");
return;
}
//用户名未设置,返回
if((user==null)&&!mode.equals("list")){
sendError(rp,"User not set");
return;
}
//如果请求模式为login
if(mode.equals("login")){
//判断重名
if(users.exists(user)){
sendError(rp,"User exists");
return;
}

//判断是否已经添加user
if(!users.add(user)){
sendError(rp,"Problem adding user");
return;
}

//一切正常,检测通过,添加系统信息告诉所有用户,当前用户已经登陆
users.addMessage(new Message("Chat",user+" has joined the chat."));
log("The user"+user+" logged in");
sendResp(rp,"User logged in");
return;
}else if(mode.equals("logout")){
if(!users.exists(user)){
sendError(rp,"User does not exist");
return;
}
if(!users.drop(user)){
sendError(rp,"Problem deleting user");
return;
}

//一切正常,检测通过,添加系统信息告诉所有用户,当前用户已经登陆
users.addMessage(new Message("Chat",user+" has left the chat."));
log("The user"+user+" logged out");
sendResp(rp,"User logged out");
return;

}else if(mode.equals("poll")){//poll请求
//检查用户是否登陆
if(!users.exists(user)){
sendError(rp, "Invalid user");
return;
}
System.out.println("接受POLL请求");
//返回聊天信息后清空该用户原来的聊天信息
returnMessages(rp,users.getMessages(user));
users.resetUser(user);
return;
}else if(mode.equals("send")){
usermsg=rq.getParameter("message");
System.out.println("接受信息:"+usermsg);//收到
if(usermsg==null){
sendError(rp,"Message not set for send");
return;
}
//一切正常,检测通过,将用户名和信息添加到user
users.addMessage(new Message(user,usermsg));
sendResp(rp,"Message Added");

return;
}else if(mode.equals("list")){//请求用户列表
returnUserList(rp);
return;
}else{
sendError(rp,"Invaild mode");
return;
}
}

public void run(){
while(!Thread.interrupted()){
Enumeration inactive =users.inactive(TIMEOUT);
while(inactive.hasMoreElements()){
String user=(String)inactive.nextElement();
users.drop(user);
users.addMessage(new Message("Chat",user+"has timed out."));
users.addMessage(new Message("Chat","Dropping "+user+" from the chat"));
log("User "+user+" timed out. Dropped from chat");
}
try{
Thread.sleep(TIMEOUT);
}catch(InterruptedException e){}
}
}

protected void sendError(HttpServletResponse rp, String error){
try{//所有错误以“-ERR开头”
PrintStream pout=new PrintStream(rp.getOutputStream());
pout.print("-ERR "+error+"\r\n");
pout.flush();
pout.close();
}catch(IOException e){}
}

//返回请求
protected void sendResp(HttpServletResponse rp,String resp){
try{
rp.setDateHeader(" Expires ",System.currentTimeMillis());
PrintStream pout=new PrintStream(rp.getOutputStream());
pout.print("+OK "+resp+"\r\n");
pout.flush();
pout.close();
}catch(IOException e){}
}

//返回消息
protected void returnMessages(HttpServletResponse rp,Enumeration messagelist){
System.out.println("接受反馈请求returnMessages");
try{
rp.setDateHeader(" Expires ",System.currentTimeMillis());
PrintStream pout=new PrintStream(rp.getOutputStream());
pout.print("+OK \r\n");
while(messagelist.hasMoreElements()){
Message message=(Message)messagelist.nextElement();
System.out.println("This is message feed back");
pout.print("+message"+message+"\r\n");
}
pout.print(".\r\n");
pout.flush();
pout.close();
}catch(IOException e){}


protected void returnUserList(HttpServletResponse rp){
try{
rp.setDateHeader(" Expires ",System.currentTimeMillis());
PrintStream pout=new PrintStream(rp.getOutputStream());
pout.print("+OK \r\n");
Enumeration userlist=users.list();
while(userlist.hasMoreElements()){
pout.print((String)userlist.nextElement());
pout.print(" \r\n");
}
pout.print(".\r\n");
pout.flush();
pout.close();
}catch(IOException e){}
}
}