Servlet-java.lang.IllegalStateException:已为此响应调用getWriter()
我使用GlassFish作为服务器和Netbeans IDE 8.0 这是我的项目结构 我的程序如何工作:Servlet-java.lang.IllegalStateException:已为此响应调用getWriter(),java,jsp,servlets,inputstream,Java,Jsp,Servlets,Inputstream,我使用GlassFish作为服务器和Netbeans IDE 8.0 这是我的项目结构 我的程序如何工作: 客户端开放本地主机:8080/台 她/他选择一杯啤酒(在index.html中) 它将发布到BeerSelect.java(简称BS) BS将调用BeerExpert.java,然后调用result.jsp,以便最终将Test.jar发送到客户端 下面是BS中的重要代码 /* Result.jsp */ String c = request.getParameter("c
/* 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();
错误:
将Test.jar移动到WEB-INF文件夹中。您可能必须将Test.jar移动到项目的源文件夹中,以便可以访问它。在for方法
getOutputStream()
中明确指出:
可以调用此方法或getWriter()来写入主体,而不是同时调用两者,除非调用了reset()
但是我认为您没有显示相关的代码,因为根据stacktrace,错误发生在controller.BeerSelect.processRequest
的BeerSelect.java
第83行
根据您所展示的内容,我无法猜测调用了getOutputStream
的位置,但错误表明调用了,因此您可以:
- 找到调用它的位置并使用
getWriter
- 或者将
中的BeerSelect.java
替换为getWriter
getOutputStream