急,高手救命!getOutputStream() Exception (第二次发帖)

森蘭丸 2004-11-24 04:00:39
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*" errorPage="" %>

<jsp:useBean id="Excel" scope="session" class="college.Excel"/>
<jsp:useBean id="EditCon" scope="session" class="college.Contracts"/>
<html>
<head>
<title>
enabling entry fields
</title>
</head>
<body bgcolor="#ffffff">
<%!ResultSet rs; %>
<%
rs = EditCon.queryAll();
response.reset();
response.setContentType("application/vnd.ms-excel");
Excel.db2Excel(response.getOutputStream(),rs,"Test",0);//
%>
</body>
</html>

执行时出现:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:599)
org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:163)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:122)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115)
org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
org.apache.jsp.test_005fexcel_jsp._jspService(test_005fexcel_jsp.java:94)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

我有写response.reset();呀!为什么呢?高手来指点一下,谢谢

…………………………………………EditCon.queryAll()……………………………………………………
public ResultSet queryAll(){
ResultSet rsResult = null;
Connection myConn = this.getdbConn();
try{
String sSql = "SELECT * FROM table";
Statement stSql = myConn.createStatement();
rsResult = stSql.executeQuery(sSql);
}catch(Exception e){
this.dbException = e.toString();
rsResult = null;
}
return rsResult;
}
………………………………Excel.db2Excel()……………………………………
public void db2Excel(OutputStream os,ResultSet _rsSql,String _WsName,int _Position) throws IOException, SQLException, WriteException {
try{
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
jxl.write.WritableSheet ws = wwb.createSheet(_WsName, _Position);
//获取记录总数
_rsSql.last();
int intRowCount = _rsSql.getRow();
ResultSetMetaData rmeta = _rsSql.getMetaData();
//获得数据字段个数
int numColumns = rmeta.getColumnCount();
for(int i=1; i<intRowCount; i++){

for(int j=0; j+1<numColumns; j++){
String str = _rsSql.getString(j+1);
jxl.write.WritableCell label = new Label(j,i,str);
ws.addCell(label);
}

}
wwb.write();
wwb.close();
}catch(Exception e){
this.dbException = e.toString();
}
}
………………………………………………………………………………
...全文
138 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
森蘭丸 2004-11-26
  • 打赏
  • 举报
回复
up
森蘭丸 2004-11-25
  • 打赏
  • 举报
回复
up!
netcom19 2004-11-25
  • 打赏
  • 举报
回复

<jsp:useBean id="Excel" scope="session" class="college.Excel"/>
<jsp:useBean id="EditCon" scope="session" class="college.Contracts"/>
去掉
看看下面的

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import = "java.io.*"%>
<%@ page import = "com.elink.hr.bean.*"%>
<%@ page import = "com.elink.database.*"%>
<%
// from www.elingke.com
String downtype = request.getParameter("downtype");
String downid = request.getParameter("downid");
DocumentBean docs = new DocumentBean();
CachedRowSet crs = docs.getDocument( downid );
if( crs!=null && crs.next() )
{
String docuri = crs.getString( "docuri" );
String filename = docuri;
int p1 = filename.lastIndexOf(".");
String file_name = filename.substring(p1);
filename = filename.substring(0,p1);
p1 = filename.lastIndexOf(File.separator);
filename = filename.substring(p1);
p1 = filename.indexOf(".");
int p2 = filename.indexOf(".", p1+1);
file_name = filename.substring(p1+1, p2)+file_name;

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment; filename=" + java.net.URLEncoder.encode(file_name, "UTF-8") );
try
{
FileInputStream stream = new FileInputStream(docuri);
OutputStream sout = response.getOutputStream();
int iRead = stream.read();
while ( iRead != -1)
{
sout.write( iRead );
iRead = stream.read();
}
sout.flush();
}
catch( Exception e )
{
e.printStackTrace();
}
}
else
{
response.sendRedirect( "error.bo?errno=90104" );
}
%>
森蘭丸 2004-11-25
  • 打赏
  • 举报
回复
现在奇怪的是,这样都不行!
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*,java.io.OutputStream,java.io.File,java.io.FileOutputStream" errorPage="" %>
<jsp:useBean id="Excel" scope="session" class="college.Excel"/>
<jsp:useBean id="EditCon" scope="session" class="college.Contracts"/>
<%
response.reset();
response.setContentType("application/vnd.ms-excel");
Excel.nqhmc(response.getOutputStream());
%>
………………………………………Excel.nqhmc(OutputStream os)………………………………
public boolean nqhmc(OutputStream os){
ResultSet rsSql = null;
boolean bResult = false;
Connection myConn = this.getdbConn();
try{
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
jxl.write.WritableSheet ws = wwb.createSheet("人员花名册",0);
String sSql = "SELECT * FROM table WHERE ((ID='') or (ID is null))";
Statement stSql = myConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rsSql = stSql.executeQuery(sSql);
//获取记录总数
rsSql.last();
int intRowCount = rsSql.getRow();
ResultSetMetaData rmeta = rsSql.getMetaData();
//获得数据字段个数
int numColumns = rmeta.getColumnCount();
for(int i=1; i<intRowCount; i++){

for(int j=0; j+1<numColumns; j++){
String str = rsSql.getString(j+1);
jxl.write.WritableCell label = new Label(j,i,str);
ws.addCell(label);
rsSql.next();
}

}
wwb.write();
wwb.close();
bResult = true;
}catch(Exception e){
this.dbException = e.toString();
bResult = false;
}
return bResult;
}
森蘭丸 2004-11-25
  • 打赏
  • 举报
回复
这里把我弄晕了:
filename = filename.substring(0,p1);
p1 = filename.lastIndexOf(File.separator);
filename = filename.substring(p1);
p1 = filename.indexOf(".");
int p2 = filename.indexOf(".", p1+1);
file_name = filename.substring(p1+1, p2)+file_name;
这里又是什么意思:
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment; filename=" + java.net.URLEncoder.encode(file_name, "UTF-8") );
小弟刚学jsp,还请netcom19(netcom)兄不吝赐教!
netcom19 2004-11-24
  • 打赏
  • 举报
回复
把 <html>
<head>
<title>
enabling entry fields
</title>
</head>
等信息去掉就可以了

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧