项目中的图片资源一般建议存储到独立的静态服务器中。为了不让图片、文档等文件资源管理零碎,不能被有心人事删除,最好选择存储oracle的大字段blob类型。这里对于java怎么存储、获取blob类型不多介绍,重点讲解jsp页面img标签显示blob字段。
首先需要通过java代码获取到oracle中的blob字段,对应java类型是java.sql.Blob。
JSP页面获取标签:
java类Servlet,通过获取到blob字节,通过“image/jpeg”类型返回图片。
首先需要通过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();
}
}
}
}