首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

Servlet奇怪有关问题

2012-01-26 
Servlet奇怪问题以下是练习时写的聊天服务器.比如我输入 xxxxxx 按了提交,以下的Servlet收到后广播给所

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

热点排行