在jsp页面上显示blob

时间:2013-04-07 10:38:31

标签: java jsp servlets

好的,所以我想在jsp页面上显示一个图像以及用户的名字和姓氏,但我只得到的图像不是名字和姓氏......那么这里有什么问题? ... ...将帮助您的帮助:)

<%@ page language="java" contentType="text/html; charset=windows-1256"
        pageEncoding="windows-1256"%>
        <%@ page import="java.sql.*" %>
         <%@ page import="java.io.*" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
    <title>Insert title here</title>
    </head>
    <body>
     <H1>Fetching Data From a Database</H1>
    <%

    Blob image = null;  
    byte[] imgData = null;  
    Connection con;
    String url="jdbc:mysql://localhost:3306/image";
    String uName="root";
    String pwd="root";
    Class.forName("com.mysql.jdbc.Driver").newInstance();
        con=DriverManager.getConnection(url,uName,pwd);
        String sql="Select * from image ";
        PreparedStatement stmt=con.prepareStatement(sql);

        ResultSet resultset=stmt.executeQuery();
    while(resultset.next())
    {

        Blob bl = resultset.getBlob("image");
        byte[] pict = bl.getBytes(1,(int)bl.length());
        response.setContentType("image/jpg");
        OutputStream o = response.getOutputStream();



    %>
    <TABLE BORDER="1">
    <TR>

    <TH>First Name</TH>
    <TH>Last Name</TH>
    <TH>picture</TH>
    </TR>
    <TR>

    <td>Image</td><td><%o.write(pict);%></td>
        <%o.flush();
        o.close();%>

    <TD> <%= resultset.getString(2) %> </TD>
    <TD><%= resultset.getString(3) %></TD>
    </TR>
    </TABLE>
    <BR>
    <%
    o.flush();
    o.close();
    }
    %>
    </body>
    </html>

1 个答案:

答案 0 :(得分:0)

您的代码包括在写完图片后再拨打o.close()。这将关闭响应输出流,不会再发送任何内容。不要这样做 - 让Web容器负责关闭输出流。

这应解释为什么不应显示名字和姓氏:响应流已关闭。

另外,我不认为响应内容类型应该是“image / jpg”,特别是考虑到HTML元标记如何说内容是“text / html”。我认为它们应该是相同的 - “text / html”。

最后 - 也许最重要的是? - JSP很老了。您可能需要考虑使用Facelets(JavaServer Faces技术)。