我使用 GlassFish 作为服务器和 Netbeans IDE 8.0 这是我的项目结构。
我的程序是如何工作的:
- 客户端打开 localhost:8080/Beer
- 她/他选择了一种啤酒(在 index.html 中)
- 它将 POST 到 BeerSelect.java(简称 BS)
- 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();
错误:
原文由 Altiano Gerung 发布,翻译遵循 CC BY-SA 4.0 许可协议
同时使用 ServletRequest.getOutputStream() 和 ServletRequest.getWriter() 是非法的。这已在此处详细回答。
java.lang.IllegalStateException:已经在使用输出流