我用file来将一个字符串写入一个xls文件中,然后再用response.getOutputStream()的方法下载为啥会报错,大神们求指教。。。。。。。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String str1="Hellow Data";
File file=new File("I:\\bn\\nihao.xls");
if(!file.exists()){
file.createNewFile();
}
byte bytes[]=new byte[512];
bytes=str1.getBytes();
int len=str1.length();
FileOutputStream fileout=new FileOutputStream(file);
fileout.write(bytes,0,len);
fileout.close();
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/x-msdownload");
String fileName = "servletDownload.docx";
response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));
OutputStream out1 = response.getOutputStream();
String str = "I:\\bn\\nihao.xls";
InputStream in = new FileInputStream(str);
byte[] buffer = new byte[1024];
int len = 0;
while((len = in.read(buffer))!=-1){
out1.write(buffer,0,len);
}
in.close();
}
首先,没有错误日志信息。不知道是哪一部分出的错~
其次,你这样写,就算java认为没错,但是人类是不能认同的::xls是 带格式的二进制文件,直接写纯文本不太好吧;然后你下载文件时在content-type里又给了一个docx的后缀!
@IT菜_鸟我想让他在根目录下新建一个.xls文件然后将查询的数据写入,然后出现下载界面 @IT菜_鸟我是想我想想让他在根目录下新建一个.xls文件然后将查询的数据写入,然后出现下载界面回复 @Sel8616:大神我的错误信息已经贴出来了回复 @IT菜鸟求学:没有错误信息~~ @IT菜鸟求学已经很明显了,response的getOutputStream()方法只能调用一次,且和response.getWriter()冲突。
你上面的代码中没有重复调用,但是显然在 JspWriterImpl里还调用了这个response的getWriter()
百度一下下面的错误信息,可以有一堆答案,都可以帮你。
但最好的方法是,看一下Servlet 源码中 HttpServletResponse的getWriter()和getOutputStream()的注释,已经写得很清楚了。
java.lang.IllegalStateException:getOutputStream()hasalreadybeencalledforthisresponse@Sel8616:
2016-3-1815:47:25org.apache.catalina.core.StandardWrapperValveinvoke
严重:Servlet.service()forservletjspthrewexception版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。