用jspsmart下载文件异常(tomcat正常,weblogic不行)
用jspsmart下载文件JSP代码如下:
<%@ page contentType="text/html;charset=GBK" import="com.jspsmart.upload.*" %><%
//取得服务器存放文件的路径
String reportTemplatePath = (String)session.getAttribute("reportTemplatePath");
//文件名
String filename = reportTemplatePath + "/" + request.getParameter("filename");
filename = new String(filename.getBytes(),"ISO-8859-1");
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 初始化
su.initialize(pageContext);
//设定contentDisposition为null以禁止浏览器自动打开文件,保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
//doc时,浏览器将自动用word打开它。扩展名为pdf时,浏览器将用acrobat打开。
su.setContentDisposition(null);
// 下载文件
su.downloadFile(filename);
%>在tomcat中运行正常。
在weblogic中运行抛出如下异常.
文件可以下载,但特别慢并且打开是乱码。
<2004-2-19 下午09时14分34秒> <Error> <HTTP> <101019> <[ServletContext(id=325867,
name=csrc,context-path=/csrc)] Servlet failed with IOException
java.net.ProtocolException: Exceeded stated content-length of: '548352' bytes
at weblogic.servlet.internal.ServletOutputStreamImpl.checkCL(ServletOutp
utStreamImpl.java:220)
at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutput
StreamImpl.java:170)
at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:986)
at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:355)
at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:336)
at jsp_servlet._test.__do_download._jspService(__do_download.java:102)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
(ServletStubImpl.java:1058)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:401)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:306)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:5445)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServic
eManager.java:780)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:3105)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:2588)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)
>
解决方法:把所有<%和%>之外的空格字符都取掉就好了.参考如下:
<%@ page contentType="text/html;charset=GBK" import="com.jspsmart.upload.*" %><%
//取得服务器存放文件的路径
String reportTemplatePath = (String)session.getAttribute("reportTemplatePath");
//文件名
String filename = reportTemplatePath + "/" + request.getParameter("filename");
filename = new String(filename.getBytes(),"ISO-8859-1");
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 初始化
su.initialize(pageContext);
//设定contentDisposition为null以禁止浏览器自动打开文件,保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
//doc时,浏览器将自动用word打开它。扩展名为pdf时,浏览器将用acrobat打开。
su.setContentDisposition(null);
// 下载文件
su.downloadFile(filename);
%>