要求如下:前台只请求一次,然后一直保持连接,后台(servlet)随机产生一个数字,然后在前台页面一直更新随机产生的这个数字,不要用while循环。就是一个简单的comet的实现,这个对大神肯定很简单,随便给个简单例子就行了,我找了好多例子都不能用啊,拜托了

解决方案 »

  1.   

    IBM developerWorks 上有一个例子Servlet 3.0 实战:异步 Servlet 与 Comet 风格应用程序
    http://www.ibm.com/developerworks/cn/java/j-lo-comet/index.html
      

  2.   

    网上现成的例子貌似没有? help
      

  3.   

    package test;
    import java.io.IOException;
    import java.io.PrintWriter;import javax.servlet.AsyncContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    @WebServlet(urlPatterns = { "/asyncDispatch2Async" }, asyncSupported = true)
    public class AsyncContextDispatch2AsyncServlet extends HttpServlet { 
        private static final long serialVersionUID = 46172233331022236L; 
        private static final Log log = LogFactory   .getLog(AsyncContextDispatch2AsyncServlet.class); 
        protected void doGet(HttpServletRequest request,   HttpServletResponse response) throws ServletException, IOException {  
            response.setHeader("Cache-Control", "private");  
            response.setHeader("Pragma", "no-cache");  
            response.setHeader("Connection", "Keep-Alive");  
            response.setHeader("Proxy-Connection", "Keep-Alive");  
            response.setContentType("text/html;charset=UTF-8");  
            PrintWriter out = response.getWriter(); 
            out.println(createNumber());  
            out.flush();  
            if (!request.isAsyncSupported()) {   
                log.info("the servlet is not supported Async");   
                return;  
                }  request.startAsync(request, response);  
                if (request.isAsyncStarted()) {   
                    AsyncContext asyncContext = request.getAsyncContext();   
                    asyncContext.setTimeout(1L * 60L * 1000L);// 60sec  
                    try
                    {
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    ServletRequest request1 = asyncContext.getRequest();    
                    String disUrl = request1.getParameter("disUrl"); 
                    if (StringUtils.equals("self", disUrl)) {  
                        asyncContext.dispatch();    
                    }
    }
       } 
        public int createNumber(){
            return((int)(Math.random()*9000)+1000);
        }
    }
    真的好意思贴出来,不停的请求自己貌似是能达到我的要求,不过感觉这个跟死循环没什么区别,现在只是模拟弄个,到时候要去读电表的数据的,实时
      

  4.   

    说错了,真不好意思贴出来,新手的悲剧啊,以前没用过servlet都
      

  5.   

    一直显示随机数,好奇怪的需求。你这个为什么要用长连接,javascript间隔一段时间访问servlet不行吗?
      

  6.   

    既然都是随机数了,在页面直接用js连servlet都不需要用到!
      

  7.   

    http://www.blogjava.net/yongboy/archive/2011/01/17/346201.html  LZ可以参照这个,实在不行的话把邮箱给我  我解答
      

  8.   

    有长连接吗servlet?无状态的不行的吧就是以异步的方式不断请求并不断得到回应的需求了,楼主的例子感觉也差不多了