Gewusst wie: abrufen von Bild aus der Datenbank und die Anzeige in der JSP über Servlet?

Meine ImageDAO sieht wie folgt aus:

public InputStream getPhotos(Long userid) throws 
  IllegalArgumentException, SQLException, ClassNotFoundException {

  Connection connection = null;
  PreparedStatement preparedStatement = null;
  ResultSet resultset = null;
  Database database = new Database();
  InputStream binaryStream = null;

  try {

    connection = database.openConnection();
    preparedStatement = connection.prepareStatement(SQL_GET_PHOTO);                  
    preparedStatement.setLong(1, userid);
    preparedStatement.executeUpdate();

    while(resultset.next()) {
      binaryStream = resultset.getBinaryStream(4);
    }

  } catch (SQLException e) {
      throw new SQLException(e);
  } finally {
      close(connection, preparedStatement, resultset);
  }
  return binaryStream;
}

Meine ImageServlet sieht wie folgt aus:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
  throws ServletException, IOException {

  //Getting user id from session
  HttpSession session = request.getSession(false);
  Long userid = (Long) session.getAttribute("user");    

  try {

      InputStream photoStream = imageDAO.getPhotos(userid);

      //Prepare streams.
      BufferedInputStream input = null;
      BufferedOutputStream output = null;

      try {

      //Open streams
      input = new BufferedInputStream(photoStream, DEFAULT_BUFFER_SIZE);
      output = new BufferedOutputStream(response.getOutputStream(),
                                                   DEFAULT_BUFFER_SIZE);

      //Write file contents to response.
      byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
      int length;
      while ((length = input.read(buffer)) > 0) {
          output.write(buffer, 0, length);
      }

      } finally {
          output.close();
          input.close();
      }

      //Redirect it to profile page
      RequestDispatcher rd = request.getRequestDispatcher
                            ("/webplugin/jsp/profile/photos.jsp");
      rd.forward(request, response);


  } catch (Exception e) {
      e.printStackTrace();
  }

}

Wie sollte mein JSP-image src Aussehen

<img src="What to put here">

Offenlegung:

Den servlet-code ist kopiert aus diesem link http://balusc.blogspot.com/2007/04/imageservlet.html

Fragen:

  1. Wie retreive Bild in JSP aus ImageServlet. Jemand in Stackoverflow sagte zu setzen
    <img src="URL to Servlet" />. Aber ich weiß nicht, was es bedeutet.
  2. Ist die oben genannte Methode die richtige Art und Weise zu retreive Bild aus der Datenbank? Oder ist es besser so.

EDIT: Meine Web.xml sieht so aus

<servlet>
  <servlet-name>Photo Module</servlet-name>
  <servlet-class>app.controllers.PhotoServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>Photo Module</servlet-name>
  <url-pattern>/Photos</url-pattern>
</servlet-mapping>
InformationsquelleAutor a k | 2011-06-11
Schreibe einen Kommentar