2012-09-24 56 views
2

我试图通过从mysql中获取数据来构建一个数组。该阵列包含文字和图片。到目前为止,一切都很顺利,但现在我不知道如何从JSP页面上的memolist中显示这些图片。我能看到的只是一堆字节。让我们来看看:如何从MySQL中检索一系列图像并在JSP中显示它们

我DBQueries看起来是这样的:

public static ArrayList<Memo> selectAllMemoList() 
{ 
    DBConnectionPool pool = DBConnectionPool.getInstance(); 
    Connection connection = pool.getConnection(); 
    PreparedStatement ps = null; 
    ResultSet rs = null; 

    String query = "SELECT Users.picture, Users.username, Messages.subject, Messages.date, Messages.msg_id " + 
      "FROM Messages, Users " + 
      "WHERE Messages.uid_fk = Users.uid " + 
      "ORDER BY date DESC"; 
    try 
    { 
     ps = connection.prepareStatement(query); 
     rs = ps.executeQuery(); 

     ArrayList<Memo> memolist = new ArrayList<Memo>(); 

     String dbSqlTimestamp = ""; 

     while (rs.next()) { 
     m.setUserpicture(rs.getString("picture")); 
     m.setUsername(rs.getString("username")); 
     m.setSubject(rs.getString("subject")); 
     m.setDate(dbSqlTimestamp = new SimpleDateFormat("dd-MM-yy HH:mm").format(rs.getTimestamp("date"))); 
     m.setMessageid(rs.getInt("msg_id")); 
     memolist.add(m); 
     } 

     return memolist; 
    } 
    catch (SQLException e){ 
     e.printStackTrace(); 
     return null; 
    }   
    finally 
    { 
     DBUtil.closeResultSet(rs); 
     DBUtil.closePreparedStatement(ps); 
     pool.freeConnection(connection); 
    } 
} 

我MemoShowAll看起来是这样的:

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

    HttpSession session = request.getSession(); 

    ArrayList<Memo> memolist = DBQueries.selectAllMemoList(); 

    request.setAttribute("listmemo", memolist); 

    String url = "/restricted/MemoList.jsp"; 

    // forward the request and response to the view 
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url); 
    dispatcher.forward(request, response); 

} 

MemoList.jsp

<z:rows> 
    <core:forEach var="each" items="${listmemo}"> 
    <z:row> 
     <img src="${each.userpicture}" border=0 > 
     <z:label value="${each.username}"/> 
     <z:label value="${each.subject}"/> 
     <z:label value="${each.date}"/> 
    </z:row> 
    </core:forEach> 
</z:rows> 

干杯, BB

+0

存储在字段userpicture中的内容是什么?图像路径?和图像的存储位置? –

回答

1

我绕过这个问题的方式是使用servlet将图像公开给客户端。为此,您应该将从数据库检索到的图像字节存储到用户的session对象中。

在HTML我有< img src="/imageRender?id=someimageid"/ >

因此,当浏览器将尝试渲染图像,它将使调用/imageRender哪里我的servlet听。 servlet将读取输入参数,然后根据参数从会话对象中呈现图像。

一些有用的链接如下:

1)Display servlet as img src using session attribute

2)Writing image to servlet response with best performance

要特别注意链接2 @BalusC答案在那里说In the ImageDAO#find() you can use ResultSet#getBinaryStream() to get the image as an InputStream from the database.

你的情况的地方您可以创建一个DAO对象列表,它将表示数据库中的每一行。

相关问题