【问题标题】:Servlet - java.lang.IllegalStateException: getWriter() has already been called for this responseServlet - java.lang.IllegalStateException: getWriter() 已为此响应调用
【发布时间】:2015-09-22 12:26:25
【问题描述】:

我使用 GlassFish 作为服务器和 Netbeans IDE 8.0 这是我的项目结构。

我的程序是如何工作的:

  1. 客户端打开localhost:8080/Beer
  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();

错误:

【问题讨论】:

    标签: java jsp servlets inputstream


    【解决方案1】:

    将您的 Test.jar 移动到 WEB-INF 文件夹中。

    【讨论】:

      【解决方案2】:

      您可能需要将 test.jar 移到项目的源文件夹中,以便可以访问它。

      【讨论】:

        【解决方案3】:

        ServletResponse javadoc 中明确表示方法getOutputStream()

        可以调用此方法或 getWriter() 来写入正文,但不能同时调用这两种方法,除非调用了 reset()。

        但我认为您没有显示相关代码,因为根据堆栈跟踪,错误发生在controller.BeerSelect.processRequestBeerSelect.java 第 83 行。

        根据您显示的内容,我无法猜测在哪里调用了 getOutputStream,但错误表明它是,所以您可以:

        • 要么找到它的调用位置,然后使用 getWriter 代替
        • 或在BeerSelect.java 中将getWriter 替换为getOutputStream

        【讨论】:

          【解决方案4】:

          同时使用 ServletRequest.getOutputStream() 和 ServletRequest.getWriter() 是非法的。这已经在这里详细回答了。

          java.lang.IllegalStateException: Already using output stream

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-13
            • 1970-01-01
            • 2023-03-08
            • 2020-01-08
            • 2012-12-14
            • 1970-01-01
            相关资源
            最近更新 更多