показать альтернативное изображение из сервлета в JSP - PullRequest
0 голосов
/ 29 марта 2012

ShowImage.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package form;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CriminalPic extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "epolicia", "admin");
           PreparedStatement ps = con.prepareStatement("select * from CRIMINAL_PIC where CRIMINAL_ID = ?");
            String id = request.getParameter("id");
            ps.setString(1,id);
            ResultSet rs = ps.executeQuery();
            rs.next();
            Blob  b = rs.getBlob("PICTURE");
            response.setContentType("image/jpeg");
            response.setContentLength( (int) b.length());
            InputStream is = b.getBinaryStream();
            OutputStream os = response.getOutputStream();
            byte buf[] = new byte[(int) b.length()];
            is.read(buf);
            os.write(buf);
            os.close();
        }
        catch(Exception ex) {
            PrintWriter out = response.getWriter();
             out.print("../pics/thief.jpg");
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
}

show.jsp

<%out.print("<img width='100%' height='200' src=../CriminalPic?id=" +rs.getString(1) + "></img>");%>

Я пытаюсь отобразить изображение из базы данныхиспользуя сервлет.Он работает нормально, но для альтернативы, когда он получил какое-либо исключение, для этого случая он должен показать альтернативное изображение, путь которого был указан.Но это ничего не отображает.Нужна помощь !!

1 Ответ

0 голосов
/ 30 марта 2012

Вы вызываете сервлет CriminalPic из атрибута src тега img в HTML?
Если да, то вот моя идея.

public class CriminalPic extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    InputStream is = null;
    OutputStream os = response.getOutputStream();
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "epolicia", "admin");
       PreparedStatement ps = con.prepareStatement("select * from CRIMINAL_PIC where CRIMINAL_ID = ?");
        String id = request.getParameter("id");
        ps.setString(1,id);
        ResultSet rs = ps.executeQuery();
        rs.next();
        Blob  b = rs.getBlob("PICTURE");
        response.setContentType("image/jpeg");
        response.setContentLength( (int) b.length());
        is = b.getBinaryStream();
        byte buf[] = new byte[(int) b.length()];
        is.read(buf);
        os.write(buf);
    }
    catch(Exception ex) {
        File file = new File(getServletContext.().getRealPath("/pics/thief.jpg"));
        FileInputStream fis = new FileInputStream(file);
        int bytes;
        while ((bytes = fis.read()) != -1) {
        os.write(bytes);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...