Отображение изображения из базы данных с помощью Java Servlet
1. Database
** ORACLE **
create table PERSON
(
ID NUMBER(19) not null,
NAME VARCHAR2(50) not null,
IMAGE_DATA BLOB not null,
IMAGE_FILE_NAME VARCHAR2(30) not null
) ;
alter table PERSON
add constraint PERSON_PK primary key (ID);
** SQL SERVER **
create table PERSON
(
ID NUMERIC(19,0) not null,
NAME VARCHAR(50) not null,
IMAGE_DATA IMAGE not null,
IMAGE_FILE_NAME VARCHAR(30) not null
) ;
alter table PERSON
add constraint PERSON_PK primary key (ID);
** MYSQL **
create table PERSON
(
ID BIGINT not null,
NAME VARCHAR(50) not null,
IMAGE_DATA LONGBLOB not null,
IMAGE_FILE_NAME VARCHAR(30) not null
) ;
alter table PERSON
add constraint PERSON_PK primary key (ID);
2. Отображение Database с Servlet
В этой статье я покажу вам, как отображать изображения из Database используя Servlet . Обычно данные изображений сохраняются вами в Database в столбце данных BLOB, вам необходимо запросить эти данные в форме byte[], и записать в response. Выше я представил небольшую базу данных, которая используется для этого руководства.
Для того чтобы отобразить изображениевам понадобится Servlet, и ссылка изображения может выглядеть следующим образом:
- http://localhost:8080/ServletExamples/image?id=2
- http://localhost:8080/ServletExamples/image?id=3
Убедитесь, что у вас есть хорошее знание о JDBC и Servlet. Если нет вы можете посмотреть:JDBC:Servlet:
Project:
Person.java
package org.o7planning.servletexamples.model;
public class Person {
private Long id;
private String name;
private byte[] imageData;
private String imageFileName;
public Person() {
}
public Person(Long id, String name, String imageFileName, byte[] imageData) {
this.id = id;
this.name = name;
this.imageData = imageData;
this.imageFileName = imageFileName;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public byte[] getImageData() {
return imageData;
}
public void setImageData(byte[] imageData) {
this.imageData = imageData;
}
public String getImageFileName() {
return imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
}
DisplayImageServlet.java
package org.o7planning.servletexamples;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.o7planning.servletexamples.model.Person;
import org.o7planning.tutorial.jdbc.ConnectionUtils;
// /image?id=123
@WebServlet(urlPatterns = { "/image" })
public class DisplayImageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DisplayImageServlet() {
super();
}
private Person getImageInTable(Connection conn, Long id) throws SQLException {
String sql = "Select p.Id,p.Name,p.Image_Data,p.Image_File_Name "//
+ " from Person p where p.id = ?";
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setLong(1, id);
ResultSet rs = pstm.executeQuery();
if (rs.next()) {
String name = rs.getString("Name");
byte[] imageData = rs.getBytes("Image_Data");
String imageFileName = rs.getString("Image_File_Name");
return new Person(id, name, imageFileName, imageData);
}
return null;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn = null;
try {
// Get Database Connection.
// (See more in JDBC Tutorial)
conn = ConnectionUtils.getMyConnection();
Long id = null;
try {
id = Long.parseLong(request.getParameter("id"));
} catch (Exception e) {
}
Person person = getImageInTable(conn, id);
if (person == null) {
// No record found, redirect to default image.
response.sendRedirect(request.getContextPath() + "/images/noimage.jpg");
return;
}
// trump.jpg, putin.png
String imageFileName = person.getImageFileName();
System.out.println("File Name: "+ imageFileName);
// image/jpg
// image/png
String contentType = this.getServletContext().getMimeType(imageFileName);
System.out.println("Content Type: "+ contentType);
response.setHeader("Content-Type", contentType);
response.setHeader("Content-Length", String.valueOf(person.getImageData().length));
response.setHeader("Content-Disposition", "inline; filename=\"" + person.getImageFileName() + "\"");
// Write image data to Response.
response.getOutputStream().write(person.getImageData());
} catch (Exception e) {
throw new ServletException(e);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Запустить приложение:
Руководства Java Servlet/JSP
- Установите Tomcat Server для Eclipse
- Установите Glassfish Web Server в Windows
- Запускать веб-приложение Java Maven в Tomcat Maven Plugin
- Запуск веб-приложения Java Maven в Jetty Maven Plugin
- Запуск фоновой задачи в приложении Java Servlet
- Руководство Java Servlet для начинающих
- Руководство Java Servlet Filter
- Руководство Java JSP для начинающих
- Руководство Java JSP Standard Tag Library (JSTL)
- Установите Web Tools Platform для Eclipse
- Создайте простое приложение для входа и закрепите его с помощью Java Servlet Filter
- Создание простого веб-приложения Java с использованием Servlet, JSP и JDBC
- Загрузка и загрузка файлов, хранящихся на жестком диске с помощью Java Servlet
- Выгрузка и загрузка файлов из базы данных с помощью Java Servlet
- Отображение изображения из базы данных с помощью Java Servlet
- Перенаправление 301 Постоянное перенаправление в Java Servlet
- Как автоматически перенаправить http на https в веб-приложение Java?
- Используйте Google reCAPTCHA в веб-приложении Java
Show More