我使用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页面中将图像显示为字节数组吗?
答案 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页面: