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: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


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);
        }
    }
}

Reply via email to