【发布时间】:2016-02-18 19:25:18
【问题描述】:
我有一个 JSP 页面,我在其中循环加载数据库中的数据。数据库列之一包含存储为 Blob 的图像。当我不尝试加载图像列时,我能够成功加载数据库中的所有数据。
当我加载包括图片在内的所有数据时,页面上只显示一张图片,页面上不显示其他数据。为什么呢。从代码中可以看出,我有 5 列字符串和 1 列 Blob。我应该得到每一个 5 行。我正在寻找一种动态加载图像而不是硬编码图像路径的解决方案。
<body>
<div class="container">
<div class="row">
<%
String dbURL = "jdbc:mysql://1.1.1.1:3306/db_name";
String dbUser = "";
String dbPass = "";
Connection conn;
try{
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
conn = DriverManager.getConnection(dbURL, dbUser, dbPass);
Statement statement = conn.createStatement();
ResultSet resultset =
statement.executeQuery("select image, name, age, gender, contact, description from tablename");
while(resultset.next()) {
Blob bl = resultset.getBlob(1);
byte[] pict = bl.getBytes(1,(int)bl.length());
response.setContentType("image/jpg");
OutputStream o = response.getOutputStream();
%>
<div class="col-sm-4">
<div class="k-cust_box">
<h3><%= resultset.getString(2) %></h3>
<hr>
<img class="k-profile-img" src="<%o.write(pict);%>" height="100px" border="1" style="float: left; overflow: hidden" width="33%">
<div class="k-driver-inner-box">
<h5>Age: <%= resultset.getString(3) %></h5>
<h5>Gender: <%= resultset.getString(4) %></h5>
<h5>Contact: <%= resultset.getString(5) %></h5>
</div>
<h5 class="k-fl-lt"><%= resultset.getString(6) %></h5>
</div>
</div>
<%}
}catch (Exception e){
e.printStackTrace();
}
%>
</div>
</div>
</body>
【问题讨论】:
-
这个
response.setContentType("image/jpg");对我来说看起来很可疑。您将其设置为页面的响应对象,不是吗?我希望页面的 contentType 是例如text/html... 不过可能不是问题的根源。但是,您似乎确实将数据直接输出到响应并期望 jsp 的 html 内容也传递到那里...... -
@JanChimiak 尝试使用 text/html。甚至单个图像也不再出现,我得到一个空白屏幕。
-
我不是这个意思。在 HTTP 级别,每个请求可以有一个内容类型。服务器发送字节序列+内容类型。浏览器使用它来将字节解析为文本或图像。在您的输出流中,您首先转储文本,然后转储图像,然后再次转储文本。见stackoverflow.com/questions/5243726/…或者base64编码图片什么的。
-
我相信@JanChimiak 对内容类型的看法是正确的,而且您正在添加一个
<img ...>标记,其中src=属性应该引用一个URL 从哪里加载图像,但是您将图像字节数据放在那里,这是行不通的。另外:使用<%和%>并将 Java 代码直接放在 JSP 中已被认为是十多年来的不良做法。 -
@StephenP JSP 新手,不管你信不信,谷歌搜索为我提供了大量涉及 JSP 中的 Java 代码的指南。我快要结束了,不想重新开始所有编码以坚持良好的做法。未来的项目,当然。如您所见,我的问题涉及在多个图像的循环中将数据加载到图像 src 中。可以请帮助我,甚至可以解决这个问题的指南。失去了寻找答案的时间,却没有找到任何答案。