這是我目前的servlet代碼。這是我從數據庫中獲取圖像的地方。如何使用java servlet在JSP中顯示數據庫中的圖像?
newServlet.java
package LAWS_SERVLETS;
import LAWS_DAOS.LReceiptsDAO;
import LAWS_ENTITIES.Lawyer_Receipt;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author Meryl
*/
@WebServlet(name = "newServlet", urlPatterns = {"/newServlet"})
public class newServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
LReceiptsDAO lrDAO = new LReceiptsDAO();
int imageId = Integer.parseInt(request.getParameter("id"));
// Check if ID is supplied to the request.
if (imageId == 0) {
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
return;
}
byte[] image = lrDAO.getReceiptFile(imageId);
// Check if image is actually retrieved from database.
if (image == null) {
// Do your thing if the image does not exist in database.
// Throw an exception, or send 404, or show default/warning image, or just ignore it.
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
return;
}
// Init servlet response.
response.reset();
response.setContentType(image.getContentType());
response.setContentLength(image.getContent().length);
// Write image content to response.
response.getOutputStream().write(image.getContent());
}
}
LReceiptsDAO
public byte[] getReceiptFile(int id){
byte[] l = null;
try {
DBConnectionFactory myFactory = DBConnectionFactory.getInstance();
Connection conn = myFactory.getConnection();
PreparedStatement pstmt = conn.prepareStatement("SELECT receipt_filepath FROM lawyer_receipts"
+ "where lawyerreceipt_id = ? ");
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
l = rs.getBytes("receipt_filepath");
}
conn.close();
return l;
} catch (SQLException ex) {
Logger.getLogger(LReceiptsDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
我得到了servlet代碼從這個link但似乎我得到一個錯誤,當我設置初始化servlet響應部分。
我很抱歉問這個問題。這是我第一次嘗試從數據庫中獲取圖像blob,並通過DAO和servlet獲取圖像,到目前爲止,我只看到包含java代碼的代碼。
我很感激幫助。謝謝!
「看來,我得到一個錯誤,當我設置初始化servlet響應部分」 - 什麼樣的錯誤你得到? – megaflop
該servlet無法找到'getContentType()','getContent().length'和'getContent()'方法 – user3418987
你問一個錯誤的問題:BalusC的鏈接代碼只是說如何從Servlet *只要你的DAO給你一張圖片*。他甚至在評論中說*這是一個虛構的DAO。只需使用你自己的DAO的東西:)*。您的請求'SELECT receipt_filepath ...'讓我們認爲您的數據庫只存儲圖像的路徑。如果那是真的,你應該首先確保你真的獲得了圖像位,並且如果你不能,請提出另一個問題(包括你的嘗試)。 –