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

时间:2016-02-18 19:25:18

标签: java html5 jsp

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

2 个答案:

答案 0 :(得分:1)

img标签中的src不接受输出流,你需要将输出流写入其他位置并在img src中提供链接,例如:

<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到其他位置。)
  • 提供内嵌图像作为HTML内容的另一个节点。这通常使用src内的base64编码内容来完成,但要注意并非所有旧浏览器都支持此(IE)。请参阅How to build base64 image src with jsp source?