java - 从 mysql 检索图像并显示在 JSP 上

标签 java jsp

我有以下代码从 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/

相关文章:

java - 如何在 JSP 中动态设置 header 值

java - 如何中断某些语句的扫描程序并为其他语句运行

java - 如何通过 Spring 的 @RepositoryRestResource REST API 在多对多关系中添加元素?

java - CoreNLP MaxentTagger 架构选项 - 含义和有效性

java - struts2中如何使用jsp将值传递到新窗口

html - 我需要将 JSP 中的字符串转换为 titlecase

java - JSTL <c :if> tag 中的测试属性

jsp - JSTL 自定义标签变量替换

java - 如何使 Spring 复选框默认选中?

java - 如何使用 JDBC 或 Hibernate 获取当前数据库事务 ID?