2

mysql からデータを取得して配列を構築しようとしています。配列にはテキストと画像が含まれます。これまでのところすべてうまくいきましたが、メモリストからこれらの画像を JSP ページに表示する方法がわかりません。私が見ることができるのは、ほんの一握りのバイトです。どれどれ:

私の DBQuery は次のようになります。

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

4

1 に答える 1

1

この問題を回避する方法は、サーブレットを使用してイメージをクライアントに公開することです。これを機能させるには、データベースから取得したイメージ バイトをユーザーのsessionオブジェクトに格納する必要があります。

私が持っているhtmlで< img src="/imageRender?id=someimageid"/ >

したがって、ブラウザが画像をレンダリングしようとすると /imageRender、サーブレットがリッスンする場所が呼び出されます。サーブレットは入力パラメーターを読み取り、パラメーターに基づいてセッション オブジェクトから画像をレンダリングします。

役立つリンクは次のとおりです。

1)セッション属性を使用してサーブレットを img src として表示する

2)最高のパフォーマンスでイメージをサーブレット応答に書き込む

2 @BalusCの回答を、それが言う場所にリンクすることに特に注意してくださいIn the ImageDAO#find() you can use ResultSet#getBinaryStream() to get the image as an InputStream from the database.

あなたの場合、db の各行を表す DAO オブジェクトのリストを作成できます。

于 2012-09-24T11:27:17.587 に答える