zdcsoul 2015-09-15 14:07 采纳率: 0%
浏览 4078

tomcate cometProcessor 报错

我想做一个服务器每一秒主动向浏览器推送一个时间的demo.程序如下:

servlet

 public class CometTest extends HttpServlet implements CometProcessor {
    private static final long serialVersionUID = 1L;

    public CometTest() {
        super();
    }

    @Override
    public void event(CometEvent ce) throws IOException, ServletException{
        HttpServletRequest request = ce.getHttpServletRequest();
        HttpServletResponse response = ce.getHttpServletResponse();
        response.setHeader("Content-type", "text/html; charset=utf8");
        if(ce.getEventType() == EventType.BEGIN){
            HttpSession session = request.getSession();
            System.out.println(session.getId()+"已初始化");
        }else if(ce.getEventType() == EventType.READ){
            Sender s = new Sender(response);
            s.start();
        }else if(ce.getEventType() == EventType.ERROR){
            System.out.println(ce.getEventSubType());
        }
    }


}

Sender(用于推送消息的线程类)

 public class Sender extends Thread{

    private HttpServletResponse response;
    private PrintWriter pw;
    public Sender(HttpServletResponse response) throws IOException{
        this.response = response;
        pw = this.response.getWriter();
    }
    @Override
    public void run() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        while(true){
            pw.write(sdf.format(new Date()));
            pw.flush();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

jsp页面

 <%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script>
    function go() {
        $.ajax({
            url : "http://localhost:8080/cometTest/comet",
            type : "post",
            dataType : "text",
            data : {
                "name" : "zdc"
            },
            complete : function(xh, data) {
                $("#text1").html(xh.responseText);
            },
        });
    }
</script>
</head>
<body>
    <input type="button" id="b1" onclick="go()" value="click" />
    <label id="text1"></label><br/>
</body>
</html>

目的是进行循环的推时间到客户端,而结果是客户只收到一次推送后,服务器端报错(如下):

7719C3E7EC73EC3DEE51DA998BBFEC0F已初始化
IOEXCEPTION
九月 15, 2015 10:06:06 下午 org.apache.catalina.connector.CoyoteAdapter checkRecycled
信息: Encountered a non-recycled response and recycled it forcedly.
org.apache.catalina.connector.CoyoteAdapter$RecycleRequiredException
at org.apache.catalina.connector.CoyoteAdapter.checkRecycled(CoyoteAdapter.java:592)
at org.apache.coyote.http11.AbstractHttp11Processor.recycle(AbstractHttp11Processor.java:1814)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.release(Http11NioProtocol.java:218)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:703)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1753)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1712)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

  • 写回答

2条回答 默认 最新

  • devmiao 2015-09-15 15:38
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看