环境mysql+tomcat:
<1>先在mysql下建立如下的table. 并insert图像
mysql.sql文件如下:
CREATE TABLE photo (
photo_no int(6) unsigned NOT NULL auto_increment,
image blob,
PRIMARY KEY (`photo_no`)
)
<2>把show.jsp放在tomcat的任意目录下. show.jsp作用:从数据库中读出blob,并产生image/jpg.
show.jsp文件如下:
<%@ page contentType="text/htmlcharset=gbk" %>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*, javax.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.math.*"%>
<%
String photo_no = request.getParameter("photo_no")
//mysql连接
Class.forName("com.mysql.jdbc.Driver").newInstance()
String URL="jdbc:mysql://localhost:3306/job?user=root&password=111111"
Connection con = DriverManager.getConnection(URL)
//oracle连接
//String URL="jdbc:oracle:thin@localhost:1521:orcl2"
//user="system"
//password="manager"
//Connection con = DriverManager.getConnection(URL,user,password)
try{
// 准备语句执行对象
Statement stmt = con.createStatement()
String sql = " SELECT * FROM PHOTO WHERE photo_no = "+ photo_no
ResultSet rs = stmt.executeQuery(sql)
if (rs.next()) {
Blob b = rs.getBlob("photo_image")
long size = b.length()
//out.print(size)
byte[] bs = b.getBytes(1, (int)size)
response.setContentType("image/jpeg")
OutputStream outs = response.getOutputStream()
outs.write(bs)
outs.flush()
rs.close()
}
else {
rs.close()
response.sendRedirect("./images/error.gif")
}
}
finally{
con.close()
}
%>
<3>把如下文件放在show.jsp的同一目录下.
index.html文件如下:
<HTML>
<HEAD>
<TITLE>图像测试 </TITLE>
</HEAD>
<BODY>
<TABLE>
<TR>
<TD>图像测试</TD>
</TR>
<TR>
<TD><img src="show.jsp?photo_no=2"></TD>
</TR>
</TABLE>
</BODY>
</HTML>
1、准备要显示的图片,并创建一个最简单的jsp页面,运行起来。
2、通过ImageIo读取图片。
3、将图像的元字节数据保存到bytearray中。
4、将图像的字节数据用base64编码,转换成base64字符串。
5、把base64编码过的字符串放到img元素的src属性上。
6、最后就可以看到效果了。
我把你的代码稍微改造了下,我这边是可以显示图片的。代码如下:
数据库 *** 作部分:
package com.databaseimport java.io.InputStream
import java.sql.*
/**
* @作者 王建明
* @创建日期 13-10-7
* @创建时间 下午12:32
* @版本号 V 1.0
*/
public class DataBaseUtil {
public static InputStream getImageStreamFromDataBase() {
Connection conn = null
try {
Class.forName("com.mysql.jdbc.Driver")
conn =
DriverManager.getConnection("jdbc:mysql://localhost/quickstart", "root", "123456")
Statement stmt = conn.createStatement()
String sql = "select book_image from tbl_book where id=1 "
ResultSet rs = stmt.executeQuery(sql)
if (rs.next()) {
return rs.getBinaryStream("book_image")
}
} catch (Exception e) {
System.out.println("出现异常: " + e.getMessage())
} finally {
try {
if (conn != null)
conn.close()
} catch (SQLException e) {
e.printStackTrace()
}
}
return null
}
}
servlet部分:
package com.servletimport com.database.DataBaseUtil
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
/**
* @作者 王建明
* @创建日期 13-10-7
* @创建时间 下午12:18
* @版本号 V 1.0
*/
public class ShowImage extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response)
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
InputStream in = DataBaseUtil.getImageStreamFromDataBase()
OutputStream toClient = response.getOutputStream()
response.reset()
response.setContentType("image/jpg")//或gif
int len = 10*1024*1024
byte[] P_Buf = new byte[len]
int i
while((i = in.read(P_Buf)) != -1){
toClient.write(P_Buf, 0, i)
}
in.close()
toClient.flush()
toClient.close()
}
}
web.xml中的servlet配置:
<servlet><servlet-name>ShowImage</servlet-name>
<servlet-class>com.servlet.ShowImage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowImage</servlet-name>
<url-pattern>/showImage</url-pattern>
</servlet-mapping>
页面中加载图片方式:
<img src="showImage" />希望对你有帮助O(∩_∩)O~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)