想用jsp显示Oracle Blob类型的图片,但是不知道为什么显示出来的内容是乱码的

1、显示图片的jsp<%@pagelanguage="java"contentType="text/html;charset=gbk"%><jsp:useBeanid="... 1、显示图片的jsp
<%@ page language="java" contentType="text/html;charset=gbk"%>
<jsp:useBean id="OrcleQuery" scope="page" class="HLFtiDemo.OracleQueryBean" />
<%
response.setContentType("image/jpeg");
String id = request.getParameter("id");
byte[] data = null;
data = OrcleQuery.GetImgByteById(id);
ServletOutputStream op = response.getOutputStream();
op.write(data, 0, data.length);
op.close();
op = null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
%>
2、查询图片的java类
package HLFtiDemo;
import java.sql.*;
import java.io.*;
public class OracleQueryBean {
private final String driver= "oracle.jdbc.driver.OracleDriver";
private Connection conn= null;
public OracleQueryBean() {
try {
Class.forName(driver);
} catch (Exception ex) {
}
}
public Connection getConnection() {
try {
String url= "jdbc:oracle:thin:@127.0.0.1:1521:abc;
this.conn= DriverManager.getConnection(url,"abc", "abc");
} catch (Exception ex) {
}
return this.conn;
}
public byte[] GetImgByteById(String ID) {
if (conn== null)
this.getConnection();
byte[] data = null;
try {
Statement stmt = conn.createStatement();
ResultSet rs= stmt
.executeQuery("SELECT IMG FROM IMAGE WHERE SEQ = " + ID);
StringBuffer myStringBuffer = new StringBuffer();
if (rs.next()) {
java.sql.Blob blob = rs.getBlob("IMG");
InputStream inStream = blob.getBinaryStream();
try {
long nLen = blob.length();
int nSize = (int) nLen;
data = new byte[nSize];
inStream.read(data);
inStream.close();
} catch (Exception e) {
}
}
conn.commit();
conn.close();
} catch (Exception ex) {
}
return data;
}
}

百思不得其解
展开
 我来答
乐观的一个呆瓜
2015-01-09
知道答主
回答量:11
采纳率:0%
帮助的人:9.7万
展开全部
ServletOutputStream以二进制数据输出到浏览器,二进制,你说乱不乱码。。你可以用ImageIO这个类来输出图片。。。
更多追问追答
追问
那我是不是改下jsp部分就行了?
追答
应该是这样分析,作为jsp来讲,显示一幅图片,应该要用到《img  src =""》这个标签,所以关键是得到图片的src属性值。你可以先在servlet中,利用jdbc进行从数据库中读取你的图片文件,然后,用IO流把文件保存到你的工程目录下,这样就可以写出src值了,再跳转到jsp页面,就可以显示图片了。从数据库中读取二进制图片,应该都是先把图片读取出来,保存到硬盘上,在用img标签显示。这个思路你可以试试。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式