7
votes

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

4

4 Answers

8
votes

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

1
votes

It is explicit in ServletResponse javadoc for method getOutputStream() :

Either this method or getWriter() may be called to write the body, not both, except when reset() has been called.

But I think you did not show the relevant code because according to the stacktrace, the error occurs in controller.BeerSelect.processRequest, in BeerSelect.java line 83.

With what you show, I cannot guess where getOutputStream was called, but the error says that it was, so you can :

  • either find where it was called and use getWriter instead
  • or replace getWriter with getOutputStream in BeerSelect.java.
0
votes

Move your Test.jar inside WEB-INF folder.

0
votes

You may have to move your test.jar in the source folder of your project so that it can accessible.