我需要你的帮助。我想在一个jsp文件中显示数据库中的所有图像(其中有6张图像)。为什么使用JSP文件而不使用OutputReader? ->因为我想在下一步中使用CSS设置表格样式,所以我必须以这种特殊方式进行此操作。
选择数据库的所有图片:
public static List<Picture> displayPicture() {
List<Picture> list = new ArrayList<Picture>();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:9999/xxx", "xxx", "xxx");
String sql = "SELECT * FROM PICTURES";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
byte[] imageData = rs.getBytes("File_Data");
String imageFileName = rs.getString("File_Name");
Picture picture = new Picture();
picture.setImageData(imageData);
picture.setImageFileName(imageFileName);
list.add(picture);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
现在,我想将此列表保存在setAttribute中,以将其发送到JSP文件:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Picture> list =null;
list = DBUtils.displayPicture();
request.setAttribute("pictureList", list);
RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher("/WEB-INF/views/pictureView.jsp");
dispatcher.forward(request, response);
最后是JSP文件:
<table>
<c:forEach items="${pictureList}" var="picture">
<tr>
<td>${picture.imageData}</td>
</tr>
</c:forEach>
所以我想在一张桌子上显示所有图像。目前,表格的外观并不重要。使用此代码,我只能得到带有特殊数字和字母的表格。我认为它的二进制代码,对不对? (例如:beans.Picture@22debaab或[B @ 3f391312])
现在哪里出了错?在JSP文件的代码中,因为我必须使用
<img src="">
或者是其他东西?如果这是错误的,应该如何编码呢?
感谢大伙们
亲爱的新手
最佳答案
在控制器端使用代码段。
List<String> list = new ArrayList<String>();
while (rs.next()) {
byte[] imageData = rs.getBytes("File_Data");
list.add(org.apache.commons.codec.binary.Base64.encodeBase64String(imageData));
}
request.setAttribute("pictureList", list);
然后在html页面中显示它,
<table>
<c:forEach items="${pictureList}" var="picture">
<tr>
<td><img src="data:image/jpg;base64,${picture}"/></td>
</tr>
</c:forEach>
</table>