读书人

Servlet奇怪有关问题

发布时间: 2012-01-26 19:40:46 作者: rapoo

Servlet奇怪问题
以下是练习时写的聊天服务器.
比如我输入 "xxxxxx "按了提交,以下的Servlet收到后广播给所有客户端.
现在奇怪的是客户端收到的是两条一相同的信息.doGet()我用log()输出也看了有两次调用.看了好久找不出原因,麻烦那位帮我看看.小弟这里先谢了.
用了Observable和Observer的事件框架.

public class ChatServlet extends HttpServlet {

protected MessageSource source = new MessageSource();

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException {
this.log( "doGet start! ");
res.setContentType( "text/plain ");
PrintWriter out = res.getWriter();
out.println(this.getNextMessage());
out.flush();
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException {
String message = req.getParameter( "message ");
if (message != null)
this.broadcastMessage(message);

res.setStatus(res.SC_NO_CONTENT);
}

public String getNextMessage() {
return new MessageSink().getNextMessage(source);
}

public void broadcastMessage(String message) {
source.sendMessage(message);
}
}

public class ChatServlet extends HttpServlet {

protected MessageSource source = new MessageSource();

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException {
this.log( "doGet start! ");
res.setContentType( "text/plain ");
PrintWriter out = res.getWriter();
out.println(this.getNextMessage());
out.flush();
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException {
String message = req.getParameter( "message ");
if (message != null)
this.broadcastMessage(message);

res.setStatus(res.SC_NO_CONTENT);
}

public String getNextMessage() {
return new MessageSink().getNextMessage(source);
}

public void broadcastMessage(String message) {
source.sendMessage(message);
}
}
//--------------------------------------
class MessageSource extends Observable {


public void sendMessage(String message) {
this.setChanged();
this.notifyObservers(message);
}
}
//---------------------------------------
class MessageSink implements Observer {
String message = null;

public synchronized void update(Observable o, Object arg) {
message = (String)arg;
notify();
}

public synchronized String getNextMessage(MessageSource source) {
source.addObserver(this);

if (message == null) {
try {
wait();
} catch (Exception ignored) {}
}

source.deleteObserver(this);

String messageCopy = message;
message = null;
return messageCopy;
}
}

[解决办法]
看看你的js吧,估计是你自己提交了两次
[解决办法]
是不是用了什么文本编译器的?

读书人网 >Java Web开发

热点推荐