如何在JSP页面中从数据库检索和显示图像?
发布于 2021-02-02 23:25:39
如何在JSP页面中从数据库检索和显示图像?
关注者
0
被浏览
286
1 个回答
-
让我们逐步查看会发生什么:
- 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); } } }
推荐阅读
-
如何从数据库检索图像并通过Servlet在JSP中显示?
2021-02-01 关注 0 浏览154 1答案
-
从数据库检索图像,并使用JSTL在JSP中显示它。
2021-02-01 关注 0 浏览104 1答案
-
如何在一个jsp页面上显示来自mysql数据库的图像?
2021-02-01 关注 0 浏览106 1答案
-
从数据库中以jsp显示图像
2021-02-01 关注 0 浏览113 1答案
-
如何从数据库检索图像并将其放置在JSP上?
2021-02-01 关注 0 浏览102 1答案
-
如何从MySQL数据库检索图像并显示在html标签中
2021-02-02 关注 0 浏览97 1答案
-
如何在数据库中上传照片以及如何在jsp页面中检索
2021-02-01 关注 0 浏览130 1答案
-
如何在Struts 2的JSP页面上显示数据库记录列表(通过Hibernate检索)?
2021-02-01 关注 0 浏览88 1答案
-
从asp.net中的数据库检索图像
2021-02-02 关注 0 浏览126 1答案
-
如何使用Spring MVC从MySQL数据库显示图像
2021-02-02 关注 0 浏览95 1答案