我写了一个jsp 下载程序 正常的话下载没问题 但是当我把文件删除了 就是下载时找不到文件的时候做异常处理
跳转到错误页面,可是页面一出现异常就不跳转怎么回事啊 高手们帮我看看啊 JSP代码 :
download.jsp
<a href="download.jsp?path=img&&name=test.doc">download</a>
<%
String root = getServletContext().getRealPath("/");
String path = request.getParameter("path")+"\\";
String name = request.getParameter("name");
System.out.println(name);
//System.out.println(root);
response.setContentType("unknown");
response.setHeader("Content-Disposition","attachment; filename=\"" + new String(name.getBytes("GB2312"),"iso-8859-1") + "\"");
File file = new File(root + path + name);
if(!file.canExecute()){
System.out.println("--------------------------------------------");
request.setAttribute("error","下载失败!此文件已经不存在!");
response.sendRedirect("OA/error.jsp");
}
try{java.io.OutputStream os = response.getOutputStream();java.io.FileInputStream fis = new java.io.FileInputStream(root + path + name);
System.out.println(root+path+name);
byte[] b = new byte[1024];int i = 0; while ( (i = fis.read(b)) > 0 ) {os.write(b, 0, i);} fis.close();os.flush();os.close();out.clear();
out = pageContext.pushBody();}
catch (Exception e ){
request.setAttribute("error","下载失败!此文件已经不存在!");
response.sendRedirect("OA/error.jsp");} %>报出的异常是:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:599)
org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:163)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:122)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115)
org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
org.apache.jsp.OA.download_jsp._jspService(download_jsp.java:145)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
comm.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)
跳转到错误页面,可是页面一出现异常就不跳转怎么回事啊 高手们帮我看看啊 JSP代码 :
download.jsp
<a href="download.jsp?path=img&&name=test.doc">download</a>
<%
String root = getServletContext().getRealPath("/");
String path = request.getParameter("path")+"\\";
String name = request.getParameter("name");
System.out.println(name);
//System.out.println(root);
response.setContentType("unknown");
response.setHeader("Content-Disposition","attachment; filename=\"" + new String(name.getBytes("GB2312"),"iso-8859-1") + "\"");
File file = new File(root + path + name);
if(!file.canExecute()){
System.out.println("--------------------------------------------");
request.setAttribute("error","下载失败!此文件已经不存在!");
response.sendRedirect("OA/error.jsp");
}
try{java.io.OutputStream os = response.getOutputStream();java.io.FileInputStream fis = new java.io.FileInputStream(root + path + name);
System.out.println(root+path+name);
byte[] b = new byte[1024];int i = 0; while ( (i = fis.read(b)) > 0 ) {os.write(b, 0, i);} fis.close();os.flush();os.close();out.clear();
out = pageContext.pushBody();}
catch (Exception e ){
request.setAttribute("error","下载失败!此文件已经不存在!");
response.sendRedirect("OA/error.jsp");} %>报出的异常是:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:599)
org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:163)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:122)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115)
org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
org.apache.jsp.OA.download_jsp._jspService(download_jsp.java:145)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
comm.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)
这条不是download.jsp的代码 是下载页的链接
os.write("<script type='text/javascript'>self.location='OA/error.jsp';</script>".getByte());
你已经使用了 response.getOutputStream();
以后所有的输出必须用这个了!方法2:
out.clearBuffer(); // 加上这一句
response.sendRedirect("OA/error.jsp");