博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP文件下载及getOutputStream() has already been的解决
阅读量:4069 次
发布时间:2019-05-25

本文共 4924 字,大约阅读时间需要 16 分钟。

<p>一、采用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><span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>.setContentType("application/x-download");//设置为下载application/x-download<br> String filenamedownload = "/系统解决方案.doc";//即将下载的文件的相对路径<br> String filenamedisplay = "系统解决方案.doc";//下载文件时显示的文件保存名称<br> filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");<br><span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>.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,<span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>);<br> }<br><span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>.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> //加上<span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>.reset(),并且所有的%>后面不要换行,包括最后一个;<br> //因为Application Server在处理编译jsp时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter,<br> //而你却要进行流输出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制,<br> //就会发生:<span class="undefined">getOutputStream</span>() <span class="hilite2"><span style="background-color: #55ff55;">has</span></span> <span class="hilite3"><span style="background-color: #aaffaa;">already</span></span> <span class="hilite4"><span style="background-color: #00ffff;">been</span></span> <span class="hilite5">called</span> <span class="hilite6">for</span> <span class="hilite7">this</span> <span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>的错误<br> //详细请见《More Java Pitfill》一书的第二部分 Web层Item 33:试图在Servlet中使用两种输出机制 270<br> //而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如AutoCAD、Word、Excel等文件<br> //下载下来的文件中就会多出一些换行符0x0d和0x0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开。<br><br><span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>.reset();//可以加也可以不加<br><span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>.setContentType("application/x-download");//设置为下载application/x-download<br> // /../../退WEB-INF/classes两级到应用的根目录下去,注意Tomcat与WebLogic下面这一句得到的路径不同,WebLogic中路径最后没有/<br> System.out.println(<span class="hilite7">this</span>.getClass().getClassLoader().getResource("/").getPath());<br> String filenamedownload = <span class="hilite7">this</span>.getClass().getClassLoader().getResource("/").getPath() + "/../../系统解决方案.doc";<br> String filenamedisplay = "系统解决方案.doc";//系统解决方案.txt<br> filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");<br><span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);<br><br> OutputStream output = null;<br> FileInputStream fis = null;<br> try<br> {<br> output = <span class="hilite8"><span id="TheWorldHiLightStyleID" style="background: #ffff00; float: none; margin: 0px; color: #000000; padding: 0px;">response</span></span>.<span class="undefined">getOutputStream</span>();<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>%></p>

转载地址:http://ndaji.baihongyu.com/

你可能感兴趣的文章
openstack虚拟机创建流程
查看>>
excel 查找一个表的数据在另一个表中是否存在
查看>>
AsyncTask、View.post(Runnable)、ViewTreeObserver三种方式总结frame animation自动启动
查看>>
Android中AsyncTask的简单用法
查看>>
概念区别
查看>>
Jenkins 启动命令
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
Android/Linux 内存监视
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
剑指offer算法题分析与整理(三)
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
QT打开项目提示no valid settings file could be found
查看>>
android 代码实现圆角
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>