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吧,估计是你自己提交了两次
[解决办法]
是不是用了什么文本编译器的?