栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在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);        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367832.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号