浅谈如何调用JSP读取数据库中图片并显示在页面上

java 专栏收录该内容
63 篇文章 0 订阅

记得当年当当网推出时用JSP读取数据库是从Oracle里读Blob图片,显示到页面上以后怎么都是个红叉子,无奈之下请教高人,答曰:这种事情一般用Servlet搞定比较好,因为JSP读取数据库终究会被翻译成JAVA代码然后编译成class,你的JSP难免出现一些格式转换什么的代码,一旦污染到读出来的image,则红叉子在所难免了。

细想之下顿觉言之有理,Google之。果然发现很多朋友遇到过此问题,遂查之~,见有人说去掉全部空格就OK了,想想也对,就马上给代码净身(可怜我里缩外进的完美代码格式)~~

然后代码成了这副模样:

Java代码

 
  1. <%@ page import="java.awt.image.BufferedImage"%>   
  2. <%@ page import="java.io.BufferedInputStream"%>   
  3. <%@ page import="java.io.IOException"%>   
  4. <%@ page import="java.sql.Connection"%>   
  5. <%@ page import="java.sql.ResultSet"%>   
  6. <%@ page import="java.sql.Statement"%>   
  7. <%@ page import="java.sql.Blob"%>   
  8. <%@ page import="oracle.sql.BLOB"%>   
  9. <%@ page import="javax.naming.InitialContext"%>   
  10. <%@ page import="javax.imageio.ImageIO"%>   
  11. <%@ page import="javax.sql.DataSource"%>   
  12. <%@ page import="javax.servlet.ServletOutputStream"%>   
  13. <%@ page import="com.sun.image.codec.jpeg.JPEGCodec"%>   
  14. <%@ page import="com.sun.image.codec.jpeg.JPEGImageEncoder"%>   
  15. <%InitialContext ic=new InitialContext();   
  16. DataSource ds=(DataSource)ic.lookup("DSNAME");   
  17. Connection conn=null;   
  18. conn =ds.getConnection);   
  19. Statement stmt=null;BufferedInputStream inputimage=null;   
  20. stmt=conn.createStatement();   
  21. boolean defaultCommit=conn.getAutoCommit();   
  22. conn.setAutoCommit(false);   
  23. String photoId =request.getParameter("photo_id");   
  24. try{   
  25. ResultSet rs=stmt.executeQuery("SELECT * FROM TABLENAME WHERE sys_id='"+photoId+"'");   
  26. if(rs.next()){Blob blob=(Blob)rs.getBlob("photo");   
  27. long size=blob.length();   
  28. byte[] bs=blob.getBytes(1,(int)size);   
  29. response.setContentType("image/jpeg;charset=GB2312");   
  30. response.setHeader("Content-Transfer-Encoding","base64");   
  31. OutputStream out1=response.getOutputStream();   
  32. BufferedOutputStream bos=null;   
  33. bos=new BufferedOutputStream(out1);   
  34. bos.write(bs,0,bs.length);bos.close();   
  35. rs.close();   
  36. }   
  37. else   
  38. {   
  39. rs.close();   
  40. }}   
  41. finally{   
  42. conn.close();   
  43. }%>   

然后运行之~~,呵呵,调用JSP读取数据库中图片并显示在页面上就这样出来了~~~

  • 0
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值