收录日期:2019/04/20 16:47:46 时间: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!

连接数据库的问题 又是打开窗口不许用window.open(),总监要我返工,晕倒!!!我还只有20分了.... 〓〓〓莫依〓〓〓 [求助]:菜鸟问题。一个实现依次现实数字平方的程序。 郁闷,和一群素质差,技术差的人一起工作,散分! wsad511能不能不使用测试服务器,而使用已有的was服务器 关于用C51编写的有关硬件方面的C语言程序,高手请指教! dts里面的vbscript怎么学习啊,看什么书,有没有电子书? ====刁难问题:如何设置RichTextBox的对齐方式,比如垂直居中==== 女朋友还有相处1年的同事都被公司裁了。散分,祝她们找到一个好单位! 谁能给一个滚动条的代码? 问题出在哪里?想死了我也不知道,弄明白了就给分!!! 怎样实现字符串的加密与解密... 如何让数据库表中的某个字段内容在规定时间点时清0或恢复最初值?急... 时间比较问题 SOS:在C#文件操作中,如何定位到确定的\"行\". 紧接前面的提问再问大家:若第一个页面的值是通过session传到第二个页面的,该怎样实现子父窗口传值的问题。再次谢谢 WIN2003 发布的WEB(80端口),内网能访问,外网不能访问,换成其它端口就可以(不是防火墙的问题) 请问局域网内有两台机器共享上网,宽带接入服务商是否能够知道此用户有几个人共享上网 请问,在vb6中如何调用MS-DOS命令,比如dir 0*.pdg,可得到这种文件0*.pdg的数量,但vb6就没有这样的功能,必须通过编程才能实现,不爽! 独孤九剑有多菜 SQL Server 2000中的restore database怎么会这样?请高手帮忙! 如何在已知用户名的情况下获取宽带(pppoe)的拨号密码? 上传图片到数据库(oracle)中,再取出浏览 大哥們,快來幫我呀!急!急!急!急!急!急!急!急!急!急! 在asp中如何判断当天是星期几? [新任版主]mirenys(葳薇)不好意思,本不想太招摇,可又不想让你们觉得我太吝啬了,呵呵,散点分给那些支持我的人 8月7-8日中韩电子竞技对抗赛 忘记昨天是女朋友的生日!怎么办? 关于SQL语句的问题????急啊!!!!!