当前位置: 首页 > 知识库问答 >
问题:

Servlet-java。lang.IllegalStateException:已为此响应调用getWriter()

游鸣
2023-03-14

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

我的程序如何工作:

  1. 客户端开放本地主机:8080/啤酒
  2. 她/他选择了一杯啤酒(在index.html中)
  3. 它将发布到BeerSelect。java(简称BS)
  4. BS会打电话给BeerExpert。然后调用result。最终发送测试的jsp。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();

共有3个答案

章岳
2023-03-14

移动你的测试。jar位于WEB-INF文件夹中。

子车劲
2023-03-14

对于方法getOutputStream(),它在ServletResponsejavadoc中是明确的:

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

但我认为您没有显示相关代码,因为根据stacktrace,错误发生在控制器中。比尔塞特。processRequest,在中选择。java第83行。

根据您展示的内容,我无法猜测调用了getOutputStream的位置,但错误表明调用了,因此您可以:

  • 要么找到它被调用的位置,然后使用getWriter代替
  • 或者在BeerSelect.java中将getWriter替换为getOutputStream
贺元明
2023-03-14

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

JAVAlang.IllegalStateException:已在使用输出流

 类似资料:
  • 问题内容: 我谷歌的错误消息 ,很多人说,这是因为后面的空格或换行,但在我的代码,没有一个空格或一个换行符。我在Linux上使用tomcat6。 根本原因 问题答案: 好的,你应该使用servlet而不是JSP,但是如果你确实需要…在页面顶部添加以下指令: 或者在jsp-config部分中,你的web.xml 此外flush/ close中OutputStream和返回完成时。

  • 我正在用Spring做一个项目,我有这个问题,我谷歌了错误信息,我找到了解决方案,甚至所有关于这个问题的帖子 有人能帮忙吗?

  • 我正在尝试使用以下代码段在浏览器中打开pdf文件: 我收到以下错误: 我还尝试使用以下方式关闭: 有人能帮我吗?

  • 我有一个包含表的JSP页面。加载页面时,将填充表。我还有一个每隔X秒的ajax调用,它必须刷新表内容。 加载时,按预期填充内容。但在ajax调用期间,它会失败,并出现以下错误: 我检查了这个问题上存在的问题,但没有什么好结果。我没有在代码中使用scriplets。 JSP代码: 控制器代码:

  • 我正在做关于CXF和Spring的培训,所以我写了一个非常简单的CXF演示,其中只有接口“HelloWorld”和它的实现者“HelloWorldWs”。 我想用Tomcat发布它。我编写了web.xml和applicationcontext.xml(Spring配置文件。虽然我可以发布WSDL。但是控制台列出了一个问题: 我没有使用或编写任何io函数,只是一个“sayhi”函数。我被难倒了。