Java JSP页面仅从数据库加载一个图像
我有一个JSP页面,其中我正在循环中从数据库加载数据。其中一个数据库列保存存储为Blob的图像。当我不尝试加载图像列时,我能够成功地从数据库加载所有数据 当我加载包括图像在内的所有数据时,页面上只显示一个图像,而页面上不显示其他数据。为什么会这样。从代码中可以看到,我有5列字符串和1列Blob。我应该把每一个都拿到5排。我正在寻找一种动态加载图像而不是硬编码图像路径的解决方案Java JSP页面仅从数据库加载一个图像,java,html,jsp,Java,Html,Jsp,我有一个JSP页面,其中我正在循环中从数据库加载数据。其中一个数据库列保存存储为Blob的图像。当我不尝试加载图像列时,我能够成功地从数据库加载所有数据 当我加载包括图像在内的所有数据时,页面上只显示一个图像,而页面上不显示其他数据。为什么会这样。从代码中可以看到,我有5列字符串和1列Blob。我应该把每一个都拿到5排。我正在寻找一种动态加载图像而不是硬编码图像路径的解决方案 <body> <div class="container"> <div class
<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>
“height=“100px”border=“1”style=“float:左侧;溢出:隐藏的“width=”33%“>
年龄:
性别:
联系人:
您不能只将字节转储到jsp页面正文中,然后期望它在浏览器中呈现。您必须
“
这将大致打印为
浏览器无法正确呈现这一点。它可能会显示一些东西,但你也可能赢得宾果游戏或被陨石击中
您需要通过单独的HTTP响应传递浏览器可以读取的每种类型的内容。Html格式,例如text/Html
和JPEG兼容图像格式,例如image/jpg
。这意味着您可以:
- 提供来自不同页面的图像(这就是
HTML属性指向-a href的不同位置)src
- 提供图像内联作为HTML内容的另一个节点。这通常是通过
中的base64编码内容完成的,但要注意,并非所有较旧的浏览器都支持这一点(IE)。看src
- img标签中的src不接受outputstream,您需要将outputstream写入其他位置,并在img src中提供链接,例如:
<img class="k-profile-img" src="image.jsp" height="100px" border="1" style="float: left; overflow: hidden" width="33%">
及
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();
}
%>
Thisresponse.setContentType(“image/jpg”)代码>在我看来很可疑。您正在将其设置为页面的响应对象,是吗?我希望页面的内容类型是,例如text/html
。。。但这可能不是你问题的根源。然而,您似乎正在将数据直接输出到响应中,并期望jsp的html内容也传递到响应中…@JanChimiak尝试使用text/html。即使是单一的图像不再出现,我得到一个空白的白色屏幕。这不是我的意思。在HTTP级别,每个请求可以有一个单一的内容类型。服务器发送字节+内容类型的序列。浏览器使用它将字节解析为文本或图像。在输出流中,首先转储文本,然后转储图像,然后再次转储文本。我相信@JanChimiak对内容类型的看法是正确的,而且你输入的属性应该是指向图像加载的URL,但是你将图像字节数据放在那里,这是行不通的。旁白:十多年来,使用
并将Java代码直接放在JSP中一直被认为是不好的做法。@StephenP是JSP新手,信不信由你,谷歌搜索给我带来了大量的指南,其中涉及JSP中的Java代码。我几乎快结束了,不想重新开始所有的编码来坚持良好的实践。未来的项目,当然。我的问题涉及将数据加载到多个图像的循环中的image src中,如您所见。请帮我解决这个问题,或者给我一个指南。失去了寻找答案的时间记录,没有找到任何接近的答案。唯一的问题是我不能在循环的每次迭代中上传不同的图像。我最终得到了相同的图像(数据库行中的最后一个图像)。我试图通过会话将id值从html页面发送到image.jsp,这样我就可以从TABLENAME调用SELECT image,其中id=?但同样的结果。