2015-07-05 68 views
0

我使用GlassFish作爲服務器和Netbeans IDE 8.0 這是我的項目結構。Servlet - java.lang.IllegalStateException:getWriter()已被調用此響應

enter image description here

我的程序是如何工作的:

  1. 客戶端打開本地主機:8080 /啤酒
  2. 他/她選擇啤酒(index.html中)
  3. 將POST到BeerSelect .java(簡稱BS)
  4. BS將調用BeerExpert.java,然後調用result.jsp,最終將Test.jar發送給客戶端

這是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(); 

的錯誤: enter image description here

回答

0

移動你的Test.jar的內部WEB-INF文件夾中。

0

您可能需要將test.jar移動到項目的源文件夾中,以便它可以訪問。

0

它是方法getOutputStream()ServletResponse javadoc明確:

無論此方法或的getWriter()可以被稱爲寫體,而不是兩個,除了當復位()被調用。

但我認爲,因爲根據堆棧跟蹤,在controller.BeerSelect.processRequest發生錯誤,在BeerSelect.java線83

隨着大家展示一下,我無法推測getOutputStream叫你沒有表現出相關的代碼,但錯誤說它是,那麼您可以:

  • 要麼找到在那裏它被稱爲和使用getWriter代替
  • 或01與getOutputStream取代。
相關問題