还是求救下载sevlet问题。自行写了一个servlet用于下载文件,但下载完成后,无法实现向用户提示“下载成功”等信息。 NO 我不知道说什么啊。。什么都没有我们怎么说啊 。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public void download(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); UserInfo userInfo = (UserInfo)session.getAttribute("UserInfo"); if(userInfo==null ){ userInfo = new UserInfo(); } if(userInfo.getUserCode().equals("")){ userInfo.setErrorNum("4"); session.setAttribute("UserInfo",userInfo); //response.sendRedirect("error"); return; } String downFileName = request.getParameter("FILENAME"); if(downFileName==null || downFileName.equals("")){ userInfo.setErrorNum("5"); session.setAttribute("UserInfo",userInfo); //response.sendRedirect("error"); return; } response.setContentType( "application/octet-stream" ); // MIME type for pdf doc response.setHeader("Content-disposition", "attachment; filename=" +downFileName); File file = null; try{ Properties prop = (Properties)getServletContext().getAttribute("property"); String pathtemp = prop.getProperty("downloadpath"); file = new File(pathtemp,downFileName); if(!file.exists()){ userInfo.setErrorNum("6"); session.setAttribute("UserInfo",userInfo); //response.sendRedirect("error"); return; } }catch(Exception exc){exc.printStackTrace();} BufferedInputStream iin = new BufferedInputStream(new java.io.FileInputStream(file));; BufferedOutputStream dout = new BufferedOutputStream(response.getOutputStream());; try { byte[] buffer; int length = (new Long(file.length())).intValue(); buffer = new byte[length]; try{ //传送数据 int once = 0; int total = 0; while ((total<length) && (once>=0)) { once = iin.read(buffer,total,length); total += once; dout.write(buffer,0,length); } dout.flush(); userInfo.setErrorNum("8"); session.setAttribute("UserInfo",userInfo); //response.sendRedirect("error"); }catch(Exception ex){ userInfo.setErrorNum("7"); session.setAttribute("UserInfo",userInfo); response.sendRedirect("error"); }finally{ try{ if(iin!=null){ iin.close();} if(dout!=null){ dout.close();} }catch(Exception exc){exc.printStackTrace();} } }catch(Exception ex) { userInfo.setErrorNum("7"); session.setAttribute("UserInfo",userInfo); //response.sendRedirect("error"); } //当下载完成后,想通过out.println()方法输出一段信息提示用户下载是否成功的字样,但服务器控制台上总是提示java.lang.IllegalStateException: response already committed异常,不知如何实现? } JSP和JavaScript有什么区别? 有人搞过CAS的单点登录么?求助 Hibernate Criterria查询 在程序中怎么实现16进制数相加? 怎样设计界面 JSPweb问题 谁会编struts+hibernate+spring 大家帮忙看看这个是什么问题return actionMapping.findForward(prompt);中这个是红色? xmlhttp从服务端取回的数据怎么在也页面上显示呢? JSP中访问数据库 为什么我在JSP页面中写的发邮件的代码,写在JAVABEAN中就不行了啊? 下载WORD文档的问题?
HttpSession session = request.getSession();
UserInfo userInfo = (UserInfo)session.getAttribute("UserInfo");
if(userInfo==null ){
userInfo = new UserInfo();
}
if(userInfo.getUserCode().equals("")){
userInfo.setErrorNum("4");
session.setAttribute("UserInfo",userInfo);
//response.sendRedirect("error");
return;
}
String downFileName = request.getParameter("FILENAME");
if(downFileName==null || downFileName.equals("")){
userInfo.setErrorNum("5");
session.setAttribute("UserInfo",userInfo);
//response.sendRedirect("error");
return;
}
response.setContentType( "application/octet-stream" ); // MIME type for pdf doc
response.setHeader("Content-disposition", "attachment; filename=" +downFileName);
File file = null;
try{
Properties prop = (Properties)getServletContext().getAttribute("property");
String pathtemp = prop.getProperty("downloadpath");
file = new File(pathtemp,downFileName);
if(!file.exists()){
userInfo.setErrorNum("6");
session.setAttribute("UserInfo",userInfo);
//response.sendRedirect("error");
return;
}
}catch(Exception exc){exc.printStackTrace();}
BufferedInputStream iin = new BufferedInputStream(new java.io.FileInputStream(file));;
BufferedOutputStream dout = new BufferedOutputStream(response.getOutputStream());;
try {
byte[] buffer;
int length = (new Long(file.length())).intValue();
buffer = new byte[length];
try{
//传送数据
int once = 0;
int total = 0;
while ((total<length) && (once>=0)) {
once = iin.read(buffer,total,length);
total += once;
dout.write(buffer,0,length);
}
dout.flush();
userInfo.setErrorNum("8");
session.setAttribute("UserInfo",userInfo);
//response.sendRedirect("error");
}catch(Exception ex){
userInfo.setErrorNum("7");
session.setAttribute("UserInfo",userInfo);
response.sendRedirect("error");
}finally{
try{
if(iin!=null){ iin.close();}
if(dout!=null){ dout.close();}
}catch(Exception exc){exc.printStackTrace();}
}
}catch(Exception ex) {
userInfo.setErrorNum("7");
session.setAttribute("UserInfo",userInfo);
//response.sendRedirect("error");
}
//当下载完成后,想通过out.println()方法输出一段信息提示用户下载是否成功的字样,但服务器控制台上总是提示java.lang.IllegalStateException: response already committed异常,不知如何实现?
}