java - 通过JSP显示BLOB(图片)

标签 java jakarta-ee

我有一个代码来显示员工图表。

数据(姓名、电话、照片等)存储在 SQLServer 中,并通过 JSP 显示。 可以显示数据,除了图像 .jpg(存储在 IMAGE=BLOB 列中)。

顺便说一句,我已经显示了图像(请参见下面的代码),但我不知道如何将它放在 .css 中定义的区域中(也请参见下面的代码),因为图像通过resultSet在浏览器中加载整个页面。

有谁知道我如何“构图”图像?

<%
Connection con = FactoryConnection_SQL_SERVER.getConnection("empCHART");
Statement stSuper = con.createStatement();
Statement stSetor = con.createStatement();

Blob image = null;
byte[] imgData = null;

ResultSet rsSuper = stSuper.executeQuery("SELECT * FROM funChart WHERE dept = 'myDept'");

if (rsSuper.next()) {
image = rsSuper.getBlob(12);
imgData = image.getBytes(1, (int) image.length());
response.setContentType("image/gif");
OutputStream o = response.getOutputStream();
//o.write(imgData); // even here we got the same as below.
//o.flush();
//o.close();

--[...]

<table style="margin: 0px; margin-top: 15px;">
<tr>
<td id="photo">
<img title="<%=rsSuper.getString("empName").trim()%>" src="<%= o.wite(imageData); o.flush(); o.close(); %>" />
</td>
</td>

<td id="empData">
<h3><%=rsSuper.getString("empName")%></h3>
<p><%=rsSuper.getString("Position")%></p>
<p>Id:<br/><%=rsSuper.getString("id")%></p>
<p>Phone:<br/><%=rsSuper.getString("Phone")%></p>
<p>E-Mail:<br/><%=rsSuper.getString("Email")%></p>
</td>
</table>

这里是应该构成图像的片段:

#photo
{
    padding: 0px;
    vertical-align: middle;
    text-align: center;
    width: 170px;
    height: 220px;
}

提前致谢!

最佳答案

您在这里犯了一些基本错误。 <img src>必须指向一个 URL,不包含图像的二进制内容。 JSP 页面本身的内容类型不应设置为 image/gif .它应该保持默认为 text/html .网络服务器不应该像您预期的那样在 HTML 结果中包含具体图像。是网络浏览器根据在 src 中找到的 URL 单独下载图像。属性,然后相应地呈现它们。

最简单的方法是创建一个单独的 servlet,将图像从数据库流式传输到响应主体。您可以通过请求参数或路径信息来唯一标识图像。这是一个为此使用请求参数的示例:

<img src="imageServlet?id=<%=rsSuper.getString("id")%>" />

doGet()然后方法应该基本上执行这个工作:

String id = request.getParameter("id");

// ...

InputStream input = resultSet.getBinaryStream("imageColumnName");
OutputStream output = response.getOutputStream();
response.setContentType("image/gif");
// Now write input to output the usual way.

与具体问题无关,官方强烈反对以这种方式使用 scriptlet 十年。也许您正在阅读完全过时的书籍/教程,或者正在维护一个古老的 JSP Web 应用程序。对于一些见解,另请参阅以下问题的答案以获得一些提示:

关于java - 通过JSP显示BLOB(图片),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11192020/

相关文章:

Java:左移

java - 如何将pdf文件拆分一页并删除未使用的对象(优化)

java - 如何设置该程序以匹配 MVC 设计模式

java - 无法在应用程序级别设置对象(HashMap)

java - 在 Java EE 应用程序中使用 Thread.sleep()、定时器或平台 cron 作业进行定期操作

java - 如何创建无操作 Hibernate Criteria 限制

java - 困惑的java ThreadPool和ReentrantLock

java - 作为 IDE 的 Eclipse - 作为 Java 初学者,您发现缺少什么?

java - 有没有办法强制使用 JMS 消息选择器?

jakarta-ee - EJB 3.1 - javax.security.auth 的实现