转载自:http://blog.csdn.net/javadwr/article/details/9065989
项目中的图片资源一般建议存储到独立的静态服务器中。为了不让图片、文档等文件资源管理零碎,不能被有心人事删除,最好选择存储oracle的大字段blob类型。这里对于java怎么存储、获取blob类型不多介绍,重点讲解jsp页面img标签显示blob字段。
首先需要通过java代码获取到oracle中的blob字段,对应java类型是java.sql.Blob。
配置web.xml配置一个获取图片的servlet:源码如下。
- <servlet>
- <servlet-name>ImageServlet</servlet-name>
- <servlet-class>ImagerServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>ImageServlet</servlet-name>
- <url-pattern>*.img</url-pattern>
- </servlet-mapping>
JSP页面获取标签:
- <IMG SRC="/show.img" />
java类Servlet,通过获取到blob字节,通过“image/jpeg”类型返回图片。
- import java.io.IOException;
- import java.io.InputStream;
- import java.sql.Blob;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class ImagerServlet extends HttpServlet {
- private static final long serialVersionUID = -5665985198720593386L;
- public ImagerServlet() {
- super();
- }
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request,response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- InputStream in = null;
- ServletOutputStream oStream = null;
- try {
- response.reset();
- response.setContentType("image/jpeg"); //设置repose返回类型,这个很重要
- request.setCharacterEncoding("gbk");
- oStream =response.getOutputStream();
- Blob blob = null;//通过java获取到oracle数据库中的blob字段
- in = blob.getBinaryStream();
- int blobsize = (int) blob.length();//获取blob长度
- byte[] blobbytes = new byte[blobsize];
- int bytesRead = 0;
- while ((bytesRead = in.read(blobbytes)) != -1) {//循环写入outputstream
- oStream.write(blobbytes, 0, bytesRead);
- }
- } catch (IOException e) {
- throw e;
- } catch (Exception e) {
- } finally{
- if (in != null) {
- in.close();
- }
- if (oStream != null) {
- oStream.close();
- }
- }
- }
- }