📄 jsp文件下载及出现getoutputstream() has already been called for ___的解决方法.htm
字号:
<TR vAlign=top>
<TD width="99%">
<TABLE
style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all; WORD-WRAP: break-word"
width="100%">
<TBODY>
<TR>
<TD><SPAN class=bright-subject><A
name=178423></A>JSP文件下载及出现getOutputStream() has already been
called for ...的解决方法 </SPAN></TD></TR></TBODY></TABLE><BR>提交时间: Nov
26, 2005 11:03:55 AM </TD>
<TD width="1%">
<TABLE cellSpacing=2 cellPadding=3 border=0>
<TBODY>
<TR>
<TD noWrap><SPAN style="COLOR: red">加3分</SPAN></TD>
<TD> </TD>
<TD noWrap><A title=点击回复此主题
href="http://dev2dev.bea.com.cn/bbs/post!reply.jspa?forumID=121&threadID=29766&messageID=178423&rep=true">引用<!--img src="/bbs/images/reply-16x16.gif" width="16" height="16" border="0"--></A>
</TD>
<TD noWrap><A title=点击回复此主题
href="http://dev2dev.bea.com.cn/bbs/post!reply.jspa?forumID=121&threadID=29766&messageID=178423">回复</A>
</TD>
<TD noWrap><A title=点击给作者发站内消息
onclick="sendMessage(1791);return false;"
href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=29766&tstart=0#">发消息</A>
</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=message_content style="BORDER-TOP: #ccc 1px solid"
colSpan=2><BR>
<TABLE
style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all; WORD-WRAP: break-word"
width="100%">
<TBODY>
<TR>
<TD>JSP文件下载及出现getOutputStream() has already been called for
this
response的解决方法<BR><BR>http://iamin.blogdriver.com/iamin/1072546.html<BR><BR>一、采用RequestDispatcher的方式进行<BR><BR>1、web.xml文件中增加<BR>
<mime-mapping><BR>
<extension>doc</extension><BR>
<mime-type>application/vnd.ms-word</mime-type><BR>
</mime-mapping><BR><BR><BR>2、程序如下:<BR><BR><%@page
language="java" import="java.net.*"
pageEncoding="gb2312"%><BR><%<BR>
response.setContentType("application/x-download");//设置为下载application/x-download<BR>
String filenamedownload =
"/系统解决方案.doc";//即将下载的文件的相对路径<BR> String
filenamedisplay =
"系统解决方案.doc";//下载文件时显示的文件保存名称<BR>
filenamedisplay =
URLEncoder.encode(filenamedisplay,"UTF-8");<BR>
response.addHeader("Content-Disposition","attachment;filename="
+ filenamedisplay);<BR>
<BR> try<BR>
{<BR>
RequestDispatcher dispatcher =
application.getRequestDispatcher(filenamedownload);<BR>
if(dispatcher !=
null)<BR>
{<BR>
dispatcher.forward(request,response);<BR>
}<BR>
response.flushBuffer();<BR>
}<BR> catch(Exception
e)<BR>
{<BR>
e.printStackTrace();<BR>
}<BR> finally<BR>
{<BR> <BR>
}<BR>%><BR><BR><BR>二、采用文件流输出的方式下载<BR><BR>1、web.xml文件中增加<BR>
<mime-mapping><BR>
<extension>doc</extension><BR>
<mime-type>application/vnd.ms-word</mime-type><BR>
</mime-mapping><BR><BR><BR>2、程序如下:<BR><BR><%@page
language="java" contentType="application/x-msdownload"
import="java.io.*,java.net.*"
pageEncoding="gb2312"%><%<BR>
//关于文件下载时采用文件流输出的方式处理:<BR>
//加上response.reset(),并且所有的%>后面不要换行,包括最后一个;<BR>
//因为Application
Server在处理编译jsp时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter,<BR>
//而你却要进行流输出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制,<BR>
//就会发生:getOutputStream() has already been called for this
response的错误<BR> //详细请见《More Java
Pitfill》一书的第二部分 Web层Item 33:试图在Servlet中使用两种输出机制
270<BR>
//而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如AutoCAD、Word、Excel等文件<BR>
//下载下来的文件中就会多出一些换行符0x0d和0x0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开。<BR><BR>
response.reset();//可以加也可以不加<BR>
response.setContentType("application/x-download");//设置为下载application/x-download<BR>
//
/../../退WEB-INF/classes两级到应用的根目录下去,注意Tomcat与WebLogic下面这一句得到的路径不同,WebLogic中路径最后没有/<BR>
System.out.println(this.getClass().getClassLoader().getResource("/").getPath());<BR>
String filenamedownload =
this.getClass().getClassLoader().getResource("/").getPath() +
"/../../系统解决方案.doc";<BR> String
filenamedisplay =
"系统解决方案.doc";//系统解决方案.txt<BR>
filenamedisplay =
URLEncoder.encode(filenamedisplay,"UTF-8");<BR>
response.addHeader("Content-Disposition","attachment;filename="
+ filenamedisplay);<BR><BR> OutputStream
output = null;<BR> FileInputStream fis =
null;<BR> try<BR>
{<BR> output =
response.getOutputStream();<BR>
fis = new
FileInputStream(filenamedownload);<BR><BR>
byte[] b = new
byte[1024];<BR> int
i = 0;<BR><BR>
while((i = fis.read(b)) >
0)<BR>
{<BR>
output.write(b, 0,
i);<BR>
}<BR>
output.flush();<BR> }<BR>
catch(Exception e)<BR>
{<BR>
System.out.println("Error!");<BR>
e.printStackTrace();<BR>
}<BR> finally<BR>
{<BR> if(fis !=
null)<BR>
{<BR>
fis.close();<BR>
fis = null;<BR>
}<BR> if(output !=
null)<BR>
{<BR>
output.close();<BR>
output = null;<BR>
}<BR>
}<BR>%><BR></TD></TR></TBODY></TABLE><BR><BR>
<HR style="COLOR: #cccccc; HEIGHT: 1px" align=left>
<TABLE
style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all; WORD-WRAP: break-word"
width="100%">
<TBODY>
<TR>
<TD>
<DIV
style="PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; WIDTH: 96%; PADDING-TOP: 4px; TEXT-ALIGN: left">只有正确地找到问题的根本所在,才能成功地解决掉问题:)<BR>Read
a bit and take it out , then come back read some more .<BR><A
href="http://yulimin.javaeye.com/" target=_blank><BR><IMG
style="CURSOR: pointer"
onclick=javascript:window.open(this.src); src=""
onload="javascript:if(this.width>400)this.style.width=400;"><BR></IMG></A></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></SPAN><BR><SPAN
class=bright-message-list>
<TABLE class=bright-box cellSpacing=1 cellPadding=3 width="98%" align=center
border=0>
<TBODY>
<TR class=bright-even vAlign=top>
<TD width="1%">
<TABLE cellSpacing=0 cellPadding=0 width=180 border=0>
<TBODY>
<TR>
<TD><A title=""
href="http://dev2dev.bea.com.cn/bbs/profile.jspa?userID=1791"><B>YuLimin</B></A>
[版主] <BR><BR>发帖数: 2,283 <BR>活跃积分: 2,472 <BR>技术积分: 342 <BR>可用币值: 187
<BR>注册时间: 2002-9-4 <BR>用户状态:<FONT color=green>正常</FONT>
<BR></TD></TR></TBODY></TABLE></TD>
<TD width="99%">
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width="99%">
<TABLE
style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all; WORD-WRAP: break-word"
width="100%">
<TBODY>
<TR>
<TD><SPAN class=bright-subject><A name=179308></A>Re:
JSP文件下载及出现getOutputStream() has already been called for
...的解决方法 </SPAN></TD></TR></TBODY></TABLE><BR>提交时间: Nov 30, 2005
3:20:11 PM </TD>
<TD width="1%">
<TABLE cellSpacing=2 cellPadding=3 border=0>
<TBODY>
<TR>
<TD vAlign=center noWrap>
<FORM name=179308 action=send!default.jspa method=post
target=_blank><INPUT type=hidden value=申请积分 name=subject>
<INPUT type=hidden value=YuLimin,fengw name=master> <INPUT
type=hidden
value=帖子http://dev2dev.bea.com.cn//bbs/thread.jspa?forumID=121&threadID=29766&messageID=179308申请积分
name=body> <INPUT type=image
src="JSP文件下载及出现getOutputStream() has already been called for ___的解决方法.files/sqjifen0.gif"
border=0 name=submit> </TD></FORM>
<TD> </TD>
<TD noWrap><A title=点击回复此主题
href="http://dev2dev.bea.com.cn/bbs/post!reply.jspa?forumID=121&threadID=29766&messageID=179308&rep=true">引用<!--img src="/bbs/images/reply-16x16.gif" width="16" height="16" border="0"--></A>
</TD>
<TD noWrap><A title=点击回复此主题
href="http://dev2dev.bea.com.cn/bbs/post!reply.jspa?forumID=121&threadID=29766&messageID=179308">回复</A>
</TD>
<TD noWrap><A title=点击给作者发站内消息
onclick="sendMessage(1791);return false;"
href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=29766&tstart=0#">发消息</A>
</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD colSpan=2>
<TABLE cellSpacing=0 cellPadding=3 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top width="1%"><A
href="http://dev2dev.bea.com.cn/bbs/servlet/D2DServlet/download/121-29766-179308-2306/DownloadFile.war"
target=_blank><IMG
src="JSP文件下载及出现getOutputStream() has already been called for ___的解决方法.files/D2DServlet"
border=0> </A></TD>
<TD width="98%"><A
href="http://dev2dev.bea.com.cn/bbs/servlet/D2DServlet/download/121-29766-179308-2306/DownloadFile.war"
target=_blank>DownloadFile.war</A> (10.4
K)<BR></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=3 width=400 border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=message_content style="BORDER-TOP: #ccc 1px solid"
colSpan=2><BR>
<TABLE
style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all; WORD-WRAP: break-word"
width="100%">
<TBODY>
<TR>
<TD>修改了一下,在WebLogic上面路径/的问题。
<BR>Tomcat与WebLogic下面这一句得到的路径不同,WebLogic中路径最后没有/<BR></TD></TR></TBODY></TABLE><BR><BR>
<HR style="COLOR: #cccccc; HEIGHT: 1px" align=left>
<TABLE
style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all; WORD-WRAP: break-word"
width="100%">
<TBODY>
<TR>
<TD>
<DIV
style="PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; WIDTH: 96%; PADDING-TOP: 4px; TEXT-ALIGN: left">只有正确地找到问题的根本所在,才能成功地解决掉问题:)<BR>Read
a bit and take it out , then come back read some more .<BR><A
href="http://yulimin.javaeye.com/" target=_blank><BR><IMG
style="CURSOR: pointer"
onclick=javascript:window.open(this.src); src=""
onload="javascript:if(this.width>400)this.style.width=400;"><BR></IMG></A></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></SPAN><SPAN
class=bright-message-list>
<TABLE class=bright-box cellSpacing=1 cellPadding=3 width="98%" align=center
border=0>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -