You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2001/10/03 17:19:50 UTC
DO NOT REPLY [Bug 3941] New: -
PrinWriter.flush() HttpServletResponse.flushBuffer() do not work
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3941>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3941
PrinWriter.flush() HttpServletResponse.flushBuffer() do not work
Summary: PrinWriter.flush() HttpServletResponse.flushBuffer() do
not work
Product: Tomcat 4
Version: 4.0 Release Candidate 2
Platform: PC
OS/Version: Linux
Status: NEW
Severity: Normal
Priority: Other
Component: Unknown
AssignedTo: tomcat-dev@jakarta.apache.org
ReportedBy: a.djaoui@rl.ac.uk
Flushing of buffered output from a servlet to a client does not work as shown in
the following Servlet code and Clinet code. This problem only occured in Tomcat
4 where the output only occures after closing the PrintWriter. The flushing
works fine with Tomcat 3.2.3 for both the Prinwriter and the
HttpServletResponse.
HERE IS THE SERVLET TEST CODE:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public final class Server extends HttpServlet {
/**
* Respond to a GET request for the content produced by
* this servlet.
*
* @param request The servlet request we are processing
* @param response The servlet response we are producing
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/xml");
PrintWriter writer = response.getWriter();
writer.println("buffersize:" + response.getBufferSize());
writer.println("\nTest:");
writer.println("initial isCommited:" + response.isCommitted());
writer.println("\nresponse");
writer.flush();
writer.println("after writer.flush() isCommited:" +
response.isCommitted());
writer.println("\nParameters");
response.flushBuffer();
writer.println("after response.flushBuffer() isCommited:" +
response.isCommitted());
Enumeration names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
writer.println(name + ": " + request.getParameter(name));
writer.println("Waiting 2secs\n");
//THESE ARE THE 2 PROBLEMATIC LINES -NONE OF THEM WORKS WITH TOMCAT 4
writer.flush();
response.flushBuffer();
try {
Thread.sleep(2000);
}
catch (InterruptedException e){
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
}
}
AND HERE IS THE CLIENT CODE:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.net.URLConnection;
public class Client {
public static void main(String[] args) {
String query =
"http://localhost:8080/Server1/Server1?banana=yellow&snow=white&sea=blue";
try {
URL url = new URL(query);
BufferedReader in = new BufferedReader(new
InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null)
System.out.println(line);
} catch(IOException e) {
System.out.println("Error " + e);
}
}
}