如何从mysql中检索一系列图像并在JSP中显示它们

如何从mysql中检索一系列图像并在JSP中显示它们,mysql,jsp,servlets,Mysql,Jsp,Servlets,我试图通过从mysql获取数据来构建一个数组。数组包括文本和图片。到目前为止,一切都很顺利,但现在我不知道如何在JSP页面上显示备忘录列表中的这些图片。我所能看到的只是一堆字节。让我们看看: 我的数据库查询如下所示: public static ArrayList<Memo> selectAllMemoList() { DBConnectionPool pool = DBConnectionPool.getInstance(); Connection connecti

我试图通过从mysql获取数据来构建一个数组。数组包括文本和图片。到目前为止,一切都很顺利,但现在我不知道如何在JSP页面上显示备忘录列表中的这些图片。我所能看到的只是一堆字节。让我们看看:

我的数据库查询如下所示:

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);
    }
}
@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); 

}
publicstaticarraylistselectallmemorlist()
{
DBConnectionPool-pool=DBConnectionPool.getInstance();
Connection=pool.getConnection();
PreparedStatement ps=null;
结果集rs=null;
String query=“选择Users.picture、Users.username、Messages.subject、Messages.date、Messages.msg\u id”+
“来自消息、用户”+
“其中Messages.uid\u fk=Users.uid”+
“按日期说明订购”;
尝试
{
ps=连接。准备状态(查询);
rs=ps.executeQuery();
ArrayList memolist=新建ArrayList();
字符串dbSqlTimestamp=“”;
while(rs.next()){
m、 setUserpicture(rs.getString(“picture”);
m、 setUsername(rs.getString(“用户名”);
m、 setSubject(rs.getString(“subject”);
m、 setDate(dbSqlTimestamp=newsimpledateformat(“dd-MM-yy-HH:MM”)。格式(rs.getTimestamp(“date”));
m、 setMessageid(rs.getInt(“msg_id”);
备忘录清单。增加(m);
}
返回备忘录列表;
}
捕获(SQLE异常){
e、 printStackTrace();
返回null;
}        
最后
{
DBUtil.closeResultSet(rs);
DBUtil.closePreparedStatement(ps);
池。自由连接(连接);
}
}
我的备忘录如下所示:

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);
    }
}
@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); 

}
@覆盖
受保护的void doPost(HttpServletRequest请求,
HttpServletResponse(响应)
抛出ServletException、IOException
{   
HttpSession session=request.getSession();
ArrayList memolist=DBQueries.selectAllMemoList();
setAttribute(“列表备忘录”,备忘录列表);
字符串url=“/restricted/MemoList.jsp”;
//将请求和响应转发到视图
RequestDispatcher=getServletContext().getRequestDispatcher(url);
转发(请求、响应);
}
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

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

在html中,我有

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

以下是一些有用的链接:

(一)

(二)

请特别注意链接2@BalusC answer到它在ImageDAO中显示
的位置#find()您可以使用ResultSet#getBinaryStream()从数据库中获取作为输入流的图像。


在您的例子中,您可以创建一个DAO对象列表,该列表将表示db中的每一行。

字段userpicture中存储了什么?图像路径?图像存储在哪里?