您的位置:首页 > 编程语言 > Java开发

Java读取数据库Blob对象返回到JSP页面和getOutputStream() has already been called for this response异常处理

2011-07-22 11:26 603 查看
<%@page import="java.sql.Blob"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.CallableStatement"%>
<%@page import="java.io.BufferedOutputStream"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//CallableStatement cs = conn.prepareCall("call `xxx`.`xxxx`();");
//ResultSet rs = cs.executeQuery();
//if (rs.next()) {
//Blob b = rs.getBlob("magazine");
//long size = b.length();
//byte[] bs = b.getBytes(1, (int)size);
//} //后面差不多,主要是byte的来源变了

File file = new File("C:\\Begin Google Map.pdf");//也可以从文件读取
long length = file.length();
InputStream stream = new FileInputStream(file);
BufferedOutputStream os = new BufferedOutputStream(response.getOutputStream());//用Buffered包裹效率高
//OutputStream os = response.getOutputStream();
byte[] buf=new byte[(int)length];
response.setContentType("application/pdf");
try {
int n;
while ((n = stream.read(buf)) != -1)
os.write(buf, 0, n);//这里要这么写,表示读多少写多少
} catch (Exception e) {
e.printStackTrace();
}
os.flush();
os.close();
out.clear();//这两句话一定要加上,否则报getOutputStream() has already been called for this response异常
out = pageContext.pushBody();

%>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐