我使用GlassFish作为Server和Netbeans IDE 8.0 这是我的项目结构。
我的计划如何运作:
以下是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();
错误:
答案 0 :(得分:5)
同时使用ServletRequest.getOutputStream()和ServletRequest.getWriter()是非法的。这里已经详细解答了这一点。
java.lang.IllegalStateException: Already using output stream
答案 1 :(得分:0)
将您的Test.jar移到WEB-INF文件夹中。
答案 2 :(得分:0)
您可能需要将test.jar移动到项目的源文件夹中,以便可以访问它。
答案 3 :(得分:0)
方法getOutputStream()
的{{3}}中明确指出:
除非调用reset(),否则可以调用此方法或getWriter()来编写正文,而不是两者。
但我认为您没有显示相关代码,因为根据堆栈跟踪,错误发生在controller.BeerSelect.processRequest
,BeerSelect.java
第83行。
根据你所展示的内容,我无法猜出getOutputStream
被调用的地方,但是错误说它是,所以你可以:
getWriter
代替getWriter
替换为getOutputStream
中的BeerSelect.java
。