我有一个JSP页面,用于从循环中的数据库加载数据。其中一个数据库列保存以Blob存储的图像。当我不尝试加载图像列时,我能够成功加载数据库中的所有数据。JSP页面仅从数据库加载一个图像
当我加载包括图像的所有数据中,只有一个图像显示在网页上,并没有其它数据被显示在页面上。为什么。从代码中可以看到,我有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( “图像/ JPG”);'看起来腥给我。你将它设置为页面的响应对象,对吗?我期望页面的contentType是例如'text/html' ...虽然不是问题的根源。然而,你似乎直接输出数据到响应,并期望jsp的html内容也被传递到那里...... –
@JanChimiak用text/html试过。即使单张图像不再出现,我也会看到空白的白色屏幕。 – JasSy
这不是我的意思。在HTTP级别,每个请求可以有一个内容类型。服务器发送一系列字节+内容类型。浏览器使用它来将字节解析为文本或图像。在你的输出流中,你首先转储文本然后图像,然后再文本回来。请参阅http://stackoverflow.com/questions/5243726/how-to-display-an-image-in-jsp或base64编码图像或某事。 –