java - 无法通过jsp显示数据库中的所有信息

标签 java jsp

我的需求是通过jsp将艺术家详细信息和他的图片插入到oracle数据库中,并通过另一个jsp程序检索回信息和图片。

artist 表有五列,四列是 varchar2,第五列是 blob 类型。

我已成功插入并成功检索,但问题是它仅显示图像。下面是代码。我被困住了。我需要帮助。请推荐我。

            PreparedStatement ps=con.prepareStatement("select * from artist");
            ResultSet rs=ps.executeQuery();
            while(rs.next()){ %>
            <table><tr><th>artist fast name:</th><td><%=rs.getString(1) %></td></tr> 
                <tr><th>artist middle name:</th><td><%=rs.getString(2) %></td></tr>
                <tr><th>artist last name</th><td><%=rs.getString(3) %></td></tr>
                <tr><th>artist job</th><td><%=rs.getString(4) %></td></tr>
                <tr><th>artist image</th><td><img src="
            <%
                Blob bl=rs.getBlob(5);
                byte[] image=bl.getBytes(1, (int)bl.length());
                response.setContentType("image/jpeg");
                OutputStream o = response.getOutputStream();
                o.write(image);
                o.flush();
                o.close();
         }
            %>" height="100" width="100" alt="bye"/> </td></tr>
            </table> 
                <%
           con.close();

最佳答案

从版本 6 开始,Java SE 提供了 JAXB,通过它可以将字节转换为base64 字符串。您也可以在这里转换图像 byte[]转换为 base 64 字符串,并且可以使用 <img 显示html 标签指定 src 数据为基数 64,即 src="data:image/png;base64, .

修改您的代码如下:

<%
            PreparedStatement ps=con.prepareStatement("select * from artist");
            ResultSet rs=ps.executeQuery();
            while(rs.next()){ %>
            <table><tr><th>artist fast name:</th><td><%=rs.getString(1) %></td></tr> 
                <tr><th>artist middle name:</th><td><%=rs.getString(2) %></td></tr>
                <tr><th>artist last name</th><td><%=rs.getString(3) %></td></tr>
                <tr><th>artist job</th><td><%=rs.getString(4) %></td></tr>
                <tr><th>artist image</th><td>
                <%
                Blob bl=rs.getBlob(5);
                byte[] image=bl.getBytes(1, (int)bl.length());
                %>
                <img src="data:image/jpeg;base64, <%=javax.xml.bind.DatatypeConverter.printBase64Binary(image)%>
            " height="100" width="100" alt="bye"/> </td></tr>
            </table> 
                <%
                }
                con.close();
          %>

这是另一个示例 jsp 页面,用于获得清晰的想法:

<%@page import="java.awt.image.BufferedImage"%>
<%@page import="javax.imageio.ImageIO"%>
<%@page import="java.io.*"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
BufferedImage bImage = ImageIO.read(new File("/home/visruth/Desktop/Visruth.jpg"));//give the path of an image
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( bImage, "jpg", baos );
baos.flush();
byte[] imageInByteArray = baos.toByteArray();
baos.close();
String b64 = javax.xml.bind.DatatypeConverter.printBase64Binary(imageInByteArray);
%>

<div>
    <p>As of v6, Java SE provides JAXB</p>
    <img src="data:image/jpg;base64, <%=b64%>" alt="Visruth.jpg not found" />
</div>          
</body>
</html>

关于java - 无法通过jsp显示数据库中的所有信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22878562/

相关文章:

c# - C#中的"using "关键字,在java中如何使用?

jquery - 在 JSP 中向表单添加弹出窗口

java - session 属性被另一个 session 访问

java - 将 StringArray 的值从 java 类打印到 JSP 中

java - 如何将字段绑定(bind)到bean vaadin中的外键

java - 等价于 Java 中的 Ruby Hash

java - 如何将连接字符串与 jdbc url 一起使用

java - fragment 兼容性问题:

java - 与 JSP 编译器交互

java - 将 String 设置为可点击的 URL