`

从数据库读图片并在页面中显示

阅读更多

主要思路:

   <img src="showImage.do?name=mall&column=image"/>通过src访问servlet,由response的流输出图片到页面。

流的方式一:

        response.setHeader("Cache-Control", "no-store");
        response.setHeader("Pragma", "no-cache");
        response.setDateHeader("Expires", 0);
        response.setContentType("image/jpg");
        ServletOutputStream responseOutputStream = response.getOutputStream();
            String name = request.getParameter("mall_name");
            PreparedStatement ps = null;
            ResultSet rs = null;
            Connection con;
            String sql = "select MALL_LOGO from trustsg_mall_info where MALL_NAME = ?";
			try {
				Class.forName("com.mysql.jdbc.Driver");
				con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ofbiz","ofbiz","ofbiz");
					ps = con.prepareStatement(sql);
		            ps.setString(1, name);
		            rs = ps.executeQuery();
		            if(rs.next()){
		            	 Blob b = rs.getBlob("MALL_LOGO");
		            	 Debug.logInfo("showimage"+b, "sssssssssssss");
				            byte[] images = b.getBytes(1, (int)b.length());
				            responseOutputStream.write(images);
		            }
		           
			} catch (SQLException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}  
            responseOutputStream.flush();
            responseOutputStream.close();

 流的方式二:

 int id= Integer.parseInt(request.getParameter("picid"));
   String sql = "select pic from p WHERE picid="+id; 
   ResultSet rs=conn.getResult(sql); 
while(rs.next()) 
{
       ServletOutputStream sout = response.getOutputStream();
       //图片输出的输出流
       InputStream in = rs.getBinaryStream(1);
       byte b[] = new byte[0x7a120];
       for(int i = in.read(b); i != -1;)
       {
         sout.write(b); 
         //将缓冲区的输入输出到页面
         in.read(b);
       }
       sout.flush();
       //输入完毕,清除缓冲
       sout.close();

 使用jsp:

<%@ page contentType="text/html; charset=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(); 
} 
分享到:
评论
7 楼 thoughtfly 2012-02-04  
zhlld 写道
嗯,我在学习163编辑器,遇到很多问题了,你能帮忙解决吗?!

163编辑器我是没用过,但可以共同学习讨论。我用的比较多的是tinyMCE,你可以email我,我们一起讨论。
我的email:dfhstudio@163.com
6 楼 zhlld 2012-02-03  
嗯,我在学习163编辑器,遇到很多问题了,你能帮忙解决吗?!
5 楼 thoughtfly 2012-02-01  
zhlld 写道
我用的是第二个,出问题了,一大片乱码

原理都是相同的,第二种方法中rs.getBinaryStream(1);是取数据库中图片的二进制,你要确定,在数据库中存的就是图片的二进制形式
4 楼 zhlld 2012-01-17  
我用的是第二个,出问题了,一大片乱码
3 楼 svygh123 2010-09-13  
你好,可以帮忙看下这个问题吗:http://www.iteye.com/problems/50051,谢谢
2 楼 thoughtfly 2009-12-29  
jsp是编辑成servlet利用out来输出页面的的,所以out.Writer()和response.getOutputStream()可能就会有冲突。你可以在使用完输出流以后调用以下两行代码即可: out.clear(); out = pageContext.pushBody(); 试下
1 楼 xiaolongfeixiang 2009-12-28  
<p>请问lz,在最后的JSP输出图片的例子中,后台是否会有这样的错误?</p>
<div class="quote_title"> 错误:</div>
<div class="quote_div">
<strong>java.lang.IllegalStateException</strong>
getOutputStream() has already beencalled for this response.<br>
</div>
<p> </p>
<p>这应该是在JSP中调用getOutputStream()方法时,常见的错误!</p>

相关推荐

    Android Studio如何获取SQLite数据并显示到ListView上

    我们在使用ListView的时候需要和数据进行绑定,那么问题来了,如何获取SQLite数据库中的数据并动态的显示到ListView当中呢?其实过程很简单:首先要获取SQLite数据(当然首先你要创建一个SQLite数据库并填写了一些...

    jsp操作mysql数据库的blob字段

    jsp操作mysql数据库的blob字段,实现: 1、将磁盘文件存入mysql数据库; 2、将mysql数据库中存入的文件,读出来,输出给浏览器。

    基于SSM框架的图书馆管理系统161621(附源码+数据库)

    2.图书显示模块:图书分类(可按照年级、专业分类,图书也要有) 查询图书(模糊查询) 查看图书页面详情(详细点做两本书的页面即可) 收藏图书、给图书打分(记录在数据库里);浏览图书并做推荐(针对新用户推荐...

    手机网上商城

    网站形式,其中包含...处理图片将图片数据变化成字节流存储到数据库中,数据绑定时将图片从数据库读取出后经过输出页面显示图片。真正的图片上传数据库的网站,3个权限的设置,帮助初学者可以很快学习网页编写技术。

    PHP里面把16进制的图片数据显示在html的img标签上(实现方法)

    // 从数据库读出来的:图片的十六进制形式字符串 $icon_hex = '89504e470d0a1a0a0000000d494844520000001c00000012010300000072c92ca' .'700000006504c5445000000ffffffa5d99fdd0000003f49444154089963603e6f60c...

    乐学迷你BBS(lbbs) v1.4 Build 0315 正式版

    普通用户级及超级用户级别区分,快速发贴、回贴,可自定义论坛栏目,管理员可以对贴子加“精”,置顶,对贴子进行编辑、删除及在栏目间移动,用户可以编辑自己发布及回复的贴子,管理员可以使用HTML代码维护数据库,...

    基于SSM的个人博客系统设计软件程序源码+数据库+WORD毕业设计论文文档.zip

    它就是一个网页,但是大家可以在上面用文字或者图片分享自己的心情等,它提供的内容可以用来进行交流。 博客最开始的时候是论坛下的一个子系统。最早参与博客的都是一些信息技术的一些专家和学者,讨论的都是专业...

    我记录网站综合系统 v1.0.zip

    √性别“请选择”在论坛中显示为女 √content.section 添加投票:缩略图错误 √微博后台管理 √图片区块在list列表下的分页问题:和评论分页冲突 √论坛下面在线列表:只显示当前在线前200 名,其余通过详情进入...

    网奇Iwms网站管理系统 v5.0.1818 For .Net1.0.rar

    实现图片等文件防盗链(需在IIS中添加映射) 增加显示热门标签函数 添加新闻时可自动从内容截取简介,不再在前台生成以提高性能 新闻管理添加头条与固顶新闻管理 记录会员最后登陆ip 新闻页面添加网摘收藏功能 ...

    中网互连企业网站管理系统 2011.rar

    在安装结束后,一定要详细阅读帮助文档中的网站系统安全手册和数据库安全文档 6、有何问题可以随时到中网景网站系统专区提出,对免费版本谢绝电话来访和在线支持,商业版 用户如有问题可以随时拨打中网景联系电话...

    java源码包---java 源码 大量 实例

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JS完美锁屏,密码解锁,仿126邮箱锁屏,锁屏后屏保背景幻灯

    锁屏后显示屏保,图片幻灯片播放,转场美化过了,也可以自己加,图片停留和转场时间可自己设定。 关掉登录框后完美幻灯,双击左键出现登录框。 特别说明:JS删除的COOKIE无法重建,所以改用ASP删除COOKIE。

    JSP动态网站开发基础教程与实验指导(从基础到应用)光盘

    练习3-1 在JSP页面中静态包含文件 312 练习3-2 统计访问页面数量 312 练习3-3 求圆的面积和周长 313 练习3-4 动态加载页面并传递参数 314 第4单元 315 练习4-1 简单地验证用户登录 315 练习4-2 猜数字 316 练习4-3 ...

Global site tag (gtag.js) - Google Analytics