我有以下代码从 mysql 检索图像并希望将其显示在 JSP 上,但显示了网页但未显示图像。 这段代码有什么问题...
<tbody>
<tr>
<td> <%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="javax.servlet.http.HttpSession"%>
<%@ page language="java"%>
<%@ page session="true"%>
<%@ page import="java.sql.*"%>
<% Blob image = null; Connection con = null; Statement stmt = null; ResultSet rs = null; String iurl1=null;
byte[] imgData = null ; String DBname = "Rest_Tucan"; String userName = "aaks1962"; String password = "1962";
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/"
+ DBname + "?UseUnicode=true&charachterEncoding=UTF-8");
stmt = con.createStatement();
rs = stmt.executeQuery("select * from imagesTable where imagesTableCode = 1");
while(rs.next()){
image = rs.getBlob("imagesTableBig");
}
// display the image
imgData = image.getBytes(1,(int)image.length());
response.setContentType("image/jpg");
OutputStream o = response.getOutputStream();
o.write(imgData);
o.flush();
o.close();
}catch (SQLException e) {
e.printStackTrace();
};
%>
</td>
最佳答案
基本上,您需要 <img>
HTML 标记使 Web 浏览器将字节显示为图像,而不是使用 o.write(imgData)
。您的代码中缺少此标记。
但首先,更好的主意是从服务器端的数据库中读取图像字节(在Java代码中),然后将其转换为base64字符串,最后将此字符串设置为请求属性并使用请求调度程序将其传递到 JSP 页面。
例如,您的 Java 代码可能如下所示:
(...)
request.setAttribute("imageBytes", bytesAsBase64String);
request.getRequestDispatcher("<name_of_your_page.jsp>").forward(request, response);
哪里bytesAsBase64String
是保存转换结果的变量。
然后在 JSP 页面中,您需要放置 HTML 标记以使 Web 浏览器将字节显示为图像:
<img src="data:image/jpg;base64, ${requestScope.imageBytes}"/>
requestScope
是一个内置的 JSP 变量,您可以使用其名称获取属性。 imageBytes
是 Servlet 代码中使用的属性名称。
This answer类似的问题可能会帮助您了解详细信息。
编辑:还有一件事,尝试保留 @page
JSP 指令位于 JSP 页面顶部,以提高可读性。
关于java - 从 mysql 检索图像并显示在 JSP 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60604745/