我有一个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>
答案 0 :(得分:1)
<img class="k-profile-img" src="image.jsp" height="100px" border="1" style="float: left; overflow: hidden" width="33%">
和
image.jsp就像
<%
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 from tablename");
response.setContentType("image/jpg");
while(resultset.next()) {
Blob bl = resultset.getBlob(1);
byte[] pict = bl.getBytes(1,(int)bl.length());
}
OutputStream o = response.getOutputStream();
o.write(pict);
}catch (Exception e){
e.printStackTrace();
}
%>
答案 1 :(得分:0)
您不能将字节转储到jsp页面主体中,并期望它在浏览器中呈现。
<img class="k-profile-img" src="<%o.write(pict);%>"
这将大致打印<img class"k-profile-img" src="˙Ř˙ŕ JFIF ˙áÚExif II* (a lot of binary data follows">
这不是浏览器可以正确呈现的东西。它可能会显示某些东西,但同样可能会赢得宾果游戏或被陨石击中。
您需要传递浏览器可以在单独的 HTTP响应中读取的每种类型的内容。例如,Html text/html
和符合JPEG标准的图片,例如image/jpg
。这意味着您可以:
src
HTML属性指向的图片 - href到其他位置。)src
内的base64编码内容来完成,但要注意并非所有旧浏览器都支持此(IE)。请参阅How to build base64 image src with jsp source?