我使用GlassFish作为服务器,使用Netbeans IDE 8.0。下面是我的项目结构。
我的程序如何工作:
1.客户端打开本地主机:8080/Beer
1.她/他选择啤酒(在index.html中)
- it will POST to BeerSelect.java (BS for short)
- BS will call BeerExpert.java and then call result.jsp for finally send Test.jar to client
下面是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();
错误代码:
4条答案
按热度按时间vecaoik11#
同时使用ServletRequest.getOutputStream()和ServletRequest.getWriter()是非法的。这个问题已经在这里详细回答了。
java.lang.IllegalStateException:已在使用输出流
hlswsv352#
对于
getOutputStream()
方法,它在ServletResponse
javadoc中是显式的:但我认为您没有显示相关代码,因为根据堆栈跟踪,错误发生在
controller.BeerSelect.processRequest
中的BeerSelect.java
第83行。根据您显示的内容,我无法猜测
getOutputStream
在哪里被调用,但错误显示它在哪里,因此您可以:getWriter
BeerSelect.java
中用getOutputStream
替换getWriter
。wnrlj8wa3#
将您Test.jar移到WEB-INF文件夹中
7gcisfzg4#
您可能需要将test.jar移到项目的源文件夹中,以便可以访问它。