Java JSP页面仅从数据库加载一个图像

Java JSP页面仅从数据库加载一个图像,java,html,jsp,Java,Html,Jsp,我有一个JSP页面,其中我正在循环中从数据库加载数据。其中一个数据库列保存存储为Blob的图像。当我不尝试加载图像列时,我能够成功地从数据库加载所有数据 当我加载包括图像在内的所有数据时,页面上只显示一个图像,而页面上不显示其他数据。为什么会这样。从代码中可以看到,我有5列字符串和1列Blob。我应该把每一个都拿到5排。我正在寻找一种动态加载图像而不是硬编码图像路径的解决方案 <body> <div class="container"> <div class

我有一个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> 


“height=“100px”border=“1”style=“float:左侧;溢出:隐藏的“width=”33%“> 年龄: 性别: 联系人:
您不能只将字节转储到jsp页面正文中,然后期望它在浏览器中呈现。您必须

这将大致打印为

浏览器无法正确呈现这一点。它可能会显示一些东西,但你也可能赢得宾果游戏或被陨石击中

您需要通过单独的HTTP响应传递浏览器可以读取的每种类型的内容。Html格式,例如
text/Html
和JPEG兼容图像格式,例如
image/jpg
。这意味着您可以:

  • 提供来自不同页面的图像(这就是
    src
    HTML属性指向-a href的不同位置)
  • 提供图像内联作为HTML内容的另一个节点。这通常是通过
    src
    中的base64编码内容完成的,但要注意,并非所有较旧的浏览器都支持这一点(IE)。看

    • 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();
        }  
      %>
      
      
      
      This
      response.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=?但同样的结果。