前台请求一个ajax,导出一个word,如果导出成功则返回一个成功标志报错

问题描述

前台请求一个ajax,导出一个word,如果导出成功则返回一个成功标志,代码如下,为什么执行到红色的哪一行就报错了呢,错误如下:严重: Servlet.service() for servlet action threw exceptionjava.lang.IllegalStateException: getOutputStream() has already been called for this response 代码如下:if("AJAXEXPORTWORD".equals(actiontype)){ File file =(File)rowSet.getVpo(); String uuid = UUID.randomUUID().toString() + ".doc"; response.reset(); response.setContentType("application/msword;charset=GBK"); response.setHeader("Content-Disposition", (new StringBuilder( "attachment; filename=")).append(uuid).toString()); BufferedOutputStream bsout = new BufferedOutputStream(response.getOutputStream());       try {         IOUtils.write(FileUtils.readFileToByteArray(file), bsout);         bsout.flush();       }       finally {         IOUtils.closeQuietly(bsout);       }       PrintWriter out = response.getWriter();       out.print(getJsonFromKeyValue(new String[]{"result"},new String[]{"1"})); return null; } 如果这样写不对请指正或者有更好的写法吗

解决方案

BufferedOutputStream bsout = new BufferedOutputStream(response.getOutputStream()); 这里说明已经向浏览器输出流了, PrintWriter out = response.getWriter(); 这里也是向浏览器里写入字符,所以是不能同时调用的。java.lang.IllegalStateException: getOutputStream() has already been called for this response这句话已经说明了问题了,就是你已经调用了getOutputStream()
解决方案二:
有个比较简单的方法,直接定位到一个新的页面,在新页面导出,这样你就不用管它的返回标记了。
解决方案三:
IOUtils.closeQuietly(bsout); 这个colse导致的, 你把它向后移就不会报错了 试试看

时间: 2024-10-25 14:51:42

前台请求一个ajax,导出一个word,如果导出成功则返回一个成功标志报错的相关文章

java-public long insert 既然是一个用来添加的方法,为什么 还要返回一个 long值?

问题描述 public long insert 既然是一个用来添加的方法,为什么 还要返回一个 long值? public long insert (String table String nullColumnHack ContentValues values)这个方法就是放入添加一些值到调用该方法的database中,我不能理解的是,这个方法还能返回一个long值,这个返回long值的意义是什么呢?如果我仅仅做一个db.insert(....)的操作,long值不就没地方返回了么... 我好像

关于java数组定义一个函数清除该数组的重复元素,返回一个不能浪费长度的数组.

问题描述 关于java数组定义一个函数清除该数组的重复元素,返回一个不能浪费长度的数组. package cn.xtgj.testarr; /** 目前有数组" int[] arr = {11,2, 4, 2, 10, 11},定义一个函数清除该数组的重复元素,返回一个不能浪费长度的数组. * */ public class Arr { public void method(int[] arr){ int count=0; for(int i=0;i<arr.length;i++){ fo

c语言-声明一个数组,由用户输入数组长度。不赋初值不报错,赋初值就报错?为什么

问题描述 声明一个数组,由用户输入数组长度.不赋初值不报错,赋初值就报错?为什么 基本上,代码如下: #include<stdio.h> int main(){ int num = 0; printf(""输入数组长度:""); scanf(""%d""&num); int arr[num]; //编译不报错 //int arr[num] = {0}://编译报错 return 0;} 解决方案 因为C语言

broadcastreceiver-自己做了一个接收发送短信的练习,但是一点发送按钮就报错,也接收不了信息。求大神

问题描述 自己做了一个接收发送短信的练习,但是一点发送按钮就报错,也接收不了信息.求大神 帮帮小弟,良辰必有重谢!!!targetSDK23,minSDK18 package com.example.think.smstest; import android.annotation.TargetApi; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content

ajax中eval()解析函数(json反馈值)函数字符串解析 报错问题

ajax中eval()解析函数(json反馈值)函数字符串解析 报错问题 在一个ajax效果实现的时候,火狐报错,内容意思大概是"函数字符串解析错误",于是用alert(),发现 var result = eval(xmlhttp.responseText); 这句eval函数报错,xmlhttp.responseText可以正常弹出,但只要是eval函数一解析,就会报错,并且不显示数据:蛋疼的我只好在一般处理程序中开始设置断点,查询错误,不知道原因的我一开始就将问题锁定在了反馈值这上

exception-myeclipse导出Runnable,在windows下可执行,linux下报错

问题描述 myeclipse导出Runnable,在windows下可执行,linux下报错 mmap failed for CEN and END part of zip file Exception in thread "main" java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.(Z

ASP.NET页面内容导出到word(导出后格式不可以乱)

问题描述 不只是DataGrid导出到word/excel,页面中有datagrid也有textbox和lable,使用javascript可以实现,可是导出后word的布局比较乱而且原来页面的一些格式(比如字体加粗等)都乱掉了如何实现呢?谢谢大家! 解决方案 解决方案二:导出时用TABLE进行布局,控制显示的样式

将网页内容导出到word文档中

word|网页  <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>网页上内容导出到word</title> <script language="javascript">function OpenWord(){Layer1.style.border=0w

一个hibernate的jap查询无值报错问题!跪求大神回答!

问题描述 问题是这样我在做一个登录功能,用的是jap的EntityManager对象查询.查询语句:{Useruser=(User)em.createQuery("selectenfrom"+getEntityName(this.entityClass)+"asenwhereusName=:nameandusPsword=:pwd").setParameter("name",name).setParameter("pwd",p