Search code examples
javajspservletsinputstream

Servlet - java.lang.IllegalStateException: getWriter() has already been called for this response


I'm using GlassFish as Server and Netbeans IDE 8.0 Here is my project structure.

enter image description here

How my program works:

  1. client open localhost:8080/Beer
  2. she/he selects a beer (in index.html)
  3. it will POST to BeerSelect.java (BS for short)
  4. BS will call BeerExpert.java and then call result.jsp for finally send Test.jar to client

Here is the important code in BS.

    /* Result.jsp */
    String c = request.getParameter("color");
    BeerExpert be = new BeerExpert();
    List result = be.getBrands(c);

    request.setAttribute("styles", result);
    RequestDispatcher view = request.getRequestDispatcher("result.jsp");
    view.forward(request, response);

    /* Test Client Download */
    response.setContentType("application/jar");

    ServletContext ctx = getServletContext();
    InputStream is = ctx.getResourceAsStream("/Test.jar");

    int read = 0;
    byte[] bytes = new byte[1024];

    OutputStream os = response.getOutputStream();
    while ((read = is.read(bytes)) != -1){
        os.write(bytes, 0, read);
    }
    os.flush();

The Error: enter image description here


Solution

  • It is illegal to use both ServletRequest.getOutputStream() and ServletRequest.getWriter(). This has been answered here in detail here.

    java.lang.IllegalStateException: Already using output stream