java.lang.IllegalStateException: getOutputStream() has already been called for this response
从网上找了下资料,综合一下原因分析:
这是web容器生成的servlet代码中有out.write(””),这个和JSP中调用的response.getOutputStream()产生冲突.
即Servlet规范说明,不能既调用 response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出 IllegalStateException,因为在jsp中,out变量是通过response.getWriter得到的,在程序中既用了response.getOutputStream,又用了out变量,故出现以上错误。
解决方案:
1.在程序中添加:
out.clear()
out = pageContext.pushBody()
就可以了;
2,不要在%〕〔%之间写内容包括空格和换行符
3,在页面写入图片的时候,需要flush()
OutputStream output=response.getOutputStream()
output.flush()
4,在页面确定写入<meta http-equiv=”Content-Type” content=”text/htmlcharset=gb2312”>
The supplied data appears to be a raw XML file. Formats such as Office 2003 XML are not supported
换对象来处理
~~~~~~~~~~~~~~~~~~~~~~~~~~
/*** 仅支持2003
*
* @param file
* @throws IOException
*/
private static void readExcel2003(File file) throws IOException {
InputStream is = new FileInputStream(file)
Workbook rwb = new HSSFWorkbook(is)
Sheet sheet = rwb.getSheetAt(0)
Row row = sheet.getRow(3)
Cell cell = row.getCell(0)
System.out.println(cell.getStringCellValue())
}
/**
* 仅支持2007
*
* @param file
* @throws IOException
*/
private static void readExcel2007(File file) throws IOException {
InputStream is = new FileInputStream(file)
Workbook rwb = new XSSFWorkbook(is)
Sheet sheet = rwb.getSheetAt(0)
Row row = sheet.getRow(3)
Cell cell = row.getCell(0)
System.out.println(cell.getStringCellValue())
}
/**
* 支持2003/2007
*
* @param file
* @throws Exception
*/
private static void readExcel(File file) throws Exception {
InputStream is = new FileInputStream(file)
Workbook rwb = WorkbookFactory.create(is)
Sheet sheet = rwb.getSheetAt(0)
Row row = sheet.getRow(3)
Cell cell = row.getCell(0)
System.out.println(cell.getStringCellValue())
}