当前位置: 首页 > 面试题库 >

如何在JSP页面中从数据库检索和显示图像?

孟光耀
2023-03-14
问题内容

如何在JSP页面中从数据库检索和显示图像?


问题答案:

让我们逐步查看会发生什么:

  • JSP基本上是一种视图技术,应该可以生成HTML输出。
  • 要以HTML显示图像,你需要HTML <img>元素。
  • 要使其定位图像,你需要指定其src属性。
  • src属性需要指向有效的http://URL,而不是本地磁盘文件系统路径file://,因为当服务器和客户端在物理上不同的计算机上运行时,该路径将永远无法工作。
  • 图片网址需要在请求路径(例如http://example.com/context/images/foo.png)中或作为请求参数(例如http://example.com/context/images?id=1)中具有图片标识符。
  • 在JSP / Servlet世界中,你可以让Servlet监听特定的URL模式,例如/images/*,这样你就可以在特定的URL上执行一些Java代码。
  • 图像是二进制数据并且将被无论是作为获得byte[]InputStream从DB中,JDBC API提供ResultSet#getBytes()ResultSet#getBinaryStream()此,和JPA API提供@Lob用于此。
  • 在Servlet中,你可以仅使用通常的Java IO方法将其写入byte[]或写入响应。InputStreamOutputStream
  • 需要指示客户端将数据作为图像处理,因此至少也Content-Type需要设置响应头。你可以ServletContext#getMimeType()根据图片文件扩展名获得合适的扩展名,可以通过<mime-mapping>扩展和/或覆盖文件web.xml

应该是这样。它几乎自己编写代码。让我们从HTML(在JSP中)开始:

<img src="${pageContext.request.contextPath}/images/foo.png">
<img src="${pageContext.request.contextPath}/images/bar.png">
<img src="${pageContext.request.contextPath}/images/baz.png">

必要时,可以动态地也设置src有EL而使用迭代JSTL:

<c:forEach items="${imagenames}" var="imagename">
    <img src="${pageContext.request.contextPath}/images/${imagename}">
</c:forEach>

然后定义/创建一个servlet,该servlet侦听URL模式为的GET请求/images/*,以下示例将普通的JDBC用于作业:

@WebServlet("/images/*")
public class ImageServlet extends HttpServlet {

    // content=blob, name=varchar(255) UNIQUE.
    private static final String SQL_FIND = "SELECT content FROM Image WHERE name = ?";

    @Resource(name="jdbc/yourDB") // For Tomcat, define as <Resource> in context.xml and declare as <resource-ref> in web.xml.
    private DataSource dataSource;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String imageName = request.getPathInfo().substring(1); // Returns "foo.png".

        try (Connection connection = dataSource.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL_FIND)) {
            statement.setString(1, imageName);

            try (ResultSet resultSet = statement.executeQuery()) {
                if (resultSet.next()) {
                    byte[] content = resultSet.getBytes("content");
                    response.setContentType(getServletContext().getMimeType(imageName));
                    response.setContentLength(content.length);
                    response.getOutputStream().write(content);
                } else {
                    response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
                }
            }
        } catch (SQLException e) {
            throw new ServletException("Something failed at SQL/DB level.", e);
        }
    }
}


 类似资料:
  • 被一个问题缠住了。我是android开发的新手。我的问题是我有一个SQLite数据库,我正在其中保存映像和一些数据,但当我检索这些数据时,映像没有显示在ListView中。其他数据正在被推翻。 这是我的自定义列表布局 null 这是我的自定义适配器 } 这是activity 这是数据列表

  • 问题内容: 我使用phpmyadmin创建了一个带有表的MySQL数据库。我使用BLOB列创建了该表以容纳jpeg文件。 我对这里的php变量有疑问。 到目前为止,我的代码:(catalog.php): 如何从PHP获取变量$ result到HTML,以便可以在标记中显示它? 问题答案: 你不能 您需要创建另一个PHP脚本以返回图像数据,例如getImage.php。将catalog.php更改为

  • 我正在尝试使用Hibernate在 Struts 2 的 JSP 页面中显示数据库记录。 我已经成功地完成了检索部分。 但是无论我做什么,我似乎都无法在JSP页面中显示数据。 我尝试过互联网上的各种解决方案。但不明白问题是什么。 我可以看到表列名,但其中没有数据。 我的<code>User<code>POJO类中有所有必需的getter和setter。 我附上了我的代码: 注册操作: : <cod

  • 我可以通过这个代码找到所有的数据 我用下面的代码从数据库中获取数据…但是我的网页空白,我在控制台得到一些异常… 我控制台中的异常...

  • 如何在数据库中的jsp文件中显示图像? 下面的JSP代码:- 我们将从数据库中提取的图像存储在哪里? 任何人都可以帮忙吗?

  • 所以,数据库(MySQL)中有一个包含姓名和照片(blob)的表。在我的网页应用程序的主页上有一个按钮,点击它后-它必须是另一个页面,包含数据库的所有结果。我使用servlet/jsp/、jdbc和MVC模式,我有带有字段名称和照片(字节[])的实体User,我有返回List的DAO类,我想在结果页面上从数据库中检索每个用户照片和照片附近的他的名字。 如何使用 servlet/jsp 执行此操作?