收录日期:2019/06/26 10:35:26 时间:2016/06/01 15:44:07 标签:Web 开发
当客户端(web browser)发送一个httprequest给服务器(tomcat)以后马上生成一个httpresponse对象并把它传给(web browser)。我的问题是如何生成多个httpResopnse对象?也就是说当httprequest发送请求给服务器后,首先回复给客户端一个回应。过一段时间后再次回复另一个httpResponse来刷新客户端的数。
没看懂你说的那些话!如果你是想让你一个网页每隔xx时间就自动刷新一次的话,用
<META http-equiv="refresh" content="5"><!--让本页面每5秒刷新一次-->就解决了!
不可能的哦,没有请求是不会有响应的。你不能主动推送东西给客户。
也不是没可能,http有一种技术:服务器推技术 Server Push可以返回多个response[每隔一定时间返回一个](不过好像IE不支持,我试过,但是Mozilla支持)
具体参见Java Serverlet programing(2nd)6.4

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import com.oreilly.servlet.MultipartResponse;
import com.oreilly.servlet.ServletUtils;

public class Countdown extends HttpServlet {

  static final String LAUNCH = "/images/launch.gif";

  public void doGet(HttpServletRequest req, HttpServletResponse res)
                               throws ServletException, IOException {
    ServletOutputStream out = res.getOutputStream();  // some binary output

    // Prepare a multipart response
    MultipartResponse multi = new MultipartResponse(res);

    // First send a countdown
    for (int i = 10; i > 0; i--) {
      multi.startResponse("text/plain");
      out.println(i + "...");
      multi.endResponse();
      try { Thread.sleep(1000); } catch (InterruptedException e) { }
    }

    // Then send the launch image
    multi.startResponse("image/gif");
    try {
      ServletUtils.returnFile(req.getRealPath(LAUNCH), out);
    }
    catch (FileNotFoundException e) {
      throw new ServletException("Could not find file: " + e.getMessage());
    }

    // Don't forget to end the multipart response
    multi.finish();
  }
}


// Copyright (C) 1998-2001 by Jason Hunter <jhunter_AT_acm_DOT_org>.
// All rights reserved.  Use of this class is limited.
// Please see the LICENSE for more information.

package com.oreilly.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

/** 
 * A utility class to generate <tt>multipart/x-mixed-replace</tt> responses,
 * the kind of responses that implement server push.  Note that Microsoft
 * Internet Explorer does not understand this sort of response.
 * <p>
 * To use this class, first construct a new MultipartResponse 
 * passing to its constructor the servlet's response parameter.  
 * MultipartResponse uses the response object to fetch the 
 * servlet's output stream and to set the response's content type.
 * <p>
 * Then, for each page of content, begin by calling <tt>startResponse()</tt>
 * passing in the content type for that page.  Send the content for the 
 * page by writing to the output stream as usual.  A call to 
 * <tt>endResponse()</tt> ends the page and flushes the content so the 
 * client can see it.  At this point a <tt>sleep()</tt> or other delay
 * can be added until the next page is ready for sending.
 * <p>
 * The call to <tt>endResponse()</tt> is optional.  The 
 * <tt>startResponse()</tt> method knows whether the last response has 
 * been ended, and ends it itself if necessary.  However, it's wise to 
 * call <tt>endResponse()</tt> if there's to be a delay between the
 * time one response ends and the next begins.  It lets the client display 
 * the latest response during the time it waits for the next one.
 * <p>
 * Finally, after each response page has been sent, a call to the 
 * <tt>finish()</tt> method finishes the multipart response and sends a 
 * code telling the client there will be no more responses.
 * <p>
 * For example:
 * <blockquote><pre>
 * MultipartResponse multi = new MultipartResponse(res);
 * &nbsp;
 * multi.startResponse("text/plain");
 * out.println("On your mark");
 * multi.endResponse();
 * &nbsp;
 * try { Thread.sleep(1000); } catch (InterruptedException e) { }
 * &nbsp;
 * multi.startResponse("text/plain");
 * out.println("Get set");
 * multi.endResponse();
 * &nbsp;
 * try { Thread.sleep(1000); } catch (InterruptedException e) { }
 * &nbsp;
 * multi.startResponse("image/gif");
 * ServletUtils.returnFile(req.getRealPath("/images/go.gif"), out);
 * &nbsp;
 * multi.finish();
 * </pre></blockquote>
 *
 * @see ServletUtils
 *
 * @author <b>Jason Hunter</b>, Copyright &#169; 1998
 * @version 1.0, 98/09/18
 */
public class MultipartResponse {

  HttpServletResponse res;
  ServletOutputStream out;
  boolean endedLastResponse = true;

  /**
   * Constructs a new MultipartResponse to send content to the given
   * servlet response.
   *
   * @param response the servlet response
   * @exception IOException if an I/O error occurs
   */
  public MultipartResponse(HttpServletResponse response) throws IOException {
    // Save the response object and output stream
    res = response;
    out = res.getOutputStream();

    // Set things up
    res.setContentType("multipart/x-mixed-replace;boundary=End");
    out.println();
    out.println("--End");
  }

  /**
   * Begins a single response with the specified content type.
   * This method knows whether the last response has been ended, and 
   * ends it itself if necessary.
   *
   * @param contentType the content type of this response part
   * @exception IOException if an I/O error occurs
   */
  public void startResponse(String contentType) throws IOException {
    // End the last response if necessary
    if (!endedLastResponse) {
      endResponse();
    }
    // Start the next one
    out.println("Content-type: " + contentType);
    out.println();
    endedLastResponse = false;
  }

  /**
   * Ends a single response.  Flushes the output.
   *
   * @exception IOException if an I/O error occurs
   */
  public void endResponse() throws IOException {
    // End the last response, and flush so the client sees the content
    out.println();
    out.println("--End");
    out.flush();
    endedLastResponse = true;
  }

  /**
   * Finishes the multipart response.  Sends a code telling the client
   * there will be no more responses and flushes the output.
   *
   * @exception IOException if an I/O error occurs
   */
  public void finish() throws IOException {
    out.println("--End--");
    out.flush();
  }
}
同意

<META http-equiv="refresh" content="5"><!--让本页面每5秒刷新一次-->就解决了!
友情UP。
我觉得还是让客户端自动刷新比较现实。
客户端如果关闭了浏览器,服务器怎么知道呢?你还怎么发回应
up!

高手们Vb.net如何连接数据库 请教Linux下一个进程的并发线程数问题。 请问怎么样把数据库中的表字段的文字描述取到power design 9.5中来? 写一个连接数据库的类,拿出来分享,若有不对的地方,希望指出 有没有用jsp编写的对网页中的报表排序的功能?(在线等待) 使用MFC odbc 连接远程数据库,怎么捕捉到是否已掉线等异常。 请教! 哪位能提供比较专业,比较酷的web登陆界面 怎么查看连数据库中的一些参数? 深圳有哪些ERP公司? 我想学c#,给点好的网站,书籍下载,经典程序例子,谢谢了! 请教病毒问题? 关于chechbox复选框的问题 2000server iis and 2003server iis? 如何用一个submit按钮提交两个

表单,在线等待!急呀! 高手过招!!!!!!!!@_@ 有这种说法吗,程序员生女儿的较多 一封信中奇怪的字符,求解答? 昨天装一个服务器,碰到了前所未有的问题,大家来帮忙呀! 请问SQL SERVER 2000的性能问题,在线等 救急 菜单变灰问题 高分!VBSCRIPT语法 postgres中如何检查一张表是否已经存在? XmlTextReader问题? 自己throw一个Exception,被catch之后为什么还是出现未处理的异常啊? 关于PB数据库存储过程返回值获取的问题,急! jdbc连接orcale的问题? jboss-3.2.1_tomcat-4.1.24 安装,调试!!!急! 如何在TURBO C 下表示2进制,和8进制的数===>(在线等,高分求解)!