在jsp中显示字节数组中的图像

时间:2014-07-04 15:07:16

标签: java html jsp netbeans

我使用html和jsp在netbeans中开发了一个web应用程序,而且我必须在索引中显示来自数据库的图像。

类中有管理数据库的方法

public byte[] getImg(Connection connect, User user) throws SQLException {
        byte[] blobAsBytes = null;

        Statement statement = null;
        ResultSet rs = null;

        statement = connect.createStatement();
        rs = statement.executeQuery("select * from user");
        while (rs.next()) {
            if (rs.getString("nickName").equals(user.getNickName())) {

                Blob blob = rs.getBlob("img");
                int blobLength = (int) blob.length();
                blobAsBytes = blob.getBytes(1, blobLength);


                blob.free();
            }
        }
        return blobAsBytes;
    }

然后我尝试在jsp页面中使用它。

 <jsp:useBean id="database" scope="session" type="Datos.ControlDatos"/>
 <jsp:useBean id="access" scope="session" type="Datos.DataAccess"/>

        <%
            byte[] imgData = database.getImg(access.createConnection(),user);
            response.setContentType("image/jpeg");
            response.getOutputStream().write(imgData);            

         %>

问题在于我得到了这个例外:

org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been called for this response
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:585)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:465)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

所以有一种方法可以在jsp页面中将图像显示为字节数组吗?

2 个答案:

答案 0 :(得分:1)

您的JSP页面已经将HTML流式传输到客户端。每个请求只能返回一种响应类型。您不需要尝试将字节嵌入页面,而是需要添加指向另一个URL的img标记,该URL提供类型为image / jpeg的新响应。

答案 1 :(得分:1)

你应该创建一个将byte []写入响应的servlet或jsp,并在html页面中创建一个显示生成图像的img元素。

以下是如何将图像写入响应:

Writing image to servlet response with best performance

以下是如何将图像从servlet获取到html页面:

Pass dynamic image to JSP with servlet