java.lang.IllegalStateException: getOutputStream() has already been called for this response修改response.getOutputStream().write(b,0,len); 为out.write(len);还有,建议你最后要关闭数据库连接。。 if(con) con.close();
详细查查问题。 你上面的代码不适合, select * from pics,然后又一次性把它们写到out,是不行的。 如果你是要一个页面显示所有图片,那只能:先从数据库把它们存到服务器的一个目录下。 然后在页面上添加<img> 如果只显示一张大图,select * from pics where id =? 只选一条记录才行,response也不会不停的被重写了。
照旧不变,图片能读出来,还是报错 java.lang.IllegalStateException: getOutputStream() has already been called for this response 而且独立发布到tomcat里图片都读不到 http://expert.csdn.net/Expert/topic/2963/2963440.xml?temp=.1165125 看看他们的,好象都一样没什么帮助
为out.write(len);还有,建议你最后要关闭数据库连接。。
if(con)
con.close();
删除没??注意你的文件的头部。建议修改:
<%@ page language="java" import="java.sql.*,java.io.*"%><%把这段拷贝过去,不要做任何修改,看看结果怎么样?
return;
%>
你上面的代码不适合,
select * from pics,然后又一次性把它们写到out,是不行的。
如果你是要一个页面显示所有图片,那只能:先从数据库把它们存到服务器的一个目录下。
然后在页面上添加<img>
如果只显示一张大图,select * from pics where id =?
只选一条记录才行,response也不会不停的被重写了。
java.lang.IllegalStateException: getOutputStream() has already been called for this response
而且独立发布到tomcat里图片都读不到
http://expert.csdn.net/Expert/topic/2963/2963440.xml?temp=.1165125
看看他们的,好象都一样没什么帮助
1,写代码把文件从数据库保存到服务器的临时目录;
2,做代码把这个临时目录下的图片写到out里面。
<% //String id=request.getParameter("id");
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=furom","sa","system");
String cmd="select * from pics";
PreparedStatement sql=con.prepareStatement(cmd);
ResultSet rs = sql.executeQuery();
while(rs.next()){
InputStream in = rs.getBinaryStream("pic");
response.reset();
response.setContentType("image/jpeg");
byte[] b = new byte[1024];
int len;
while((len=in.read(b)) >0)
response.getOutputStream().write(b,0,len);}
%>是获取图片存放在数据库中的二进制数据,可将上面代码独立为myImg.jsp页面,contentType设为image/*
原来文件的src="myImg.jsp"