hibernate - 如何使用 Struts 2 + Hibernate 3 向浏览器提供图像?

标签 hibernate image struts2

我正在使用 Struts 2.1.2 和 Hibernate 3.2.6.GA 开发一个 Web 应用程序。我有一个实体,User ,我已将其映射到表 USERS在数据库中使用 Hibernate。我想要一个与该实体关联的图像,我计划将其存储为 BLOB在数据库中。我还想在网页上显示图像以及 User 的其他属性.

我能想到的解决方案是有一张 table IMAGES(ID, IMAGE)哪里IMAGEBLOB柱子。 USERS将有一个FK名为 IMAGEID 的列,它指向IMAGES table 。然后我将在 User 上映射一个属性实体,名为 imageId映射到此 IMAGEID作为龙。当使用 JSP 渲染页面时,我会将图像添加为 <img src="images.action?id=1"/>等,并有一个读取图像并将内容流式传输到浏览器的操作,并将 header 设置为长期缓存图像。

这行得通吗?是否有更好的方法来渲染存储在数据库中的图像?首先将此类图像存储在数据库中是正确的方法吗?

最佳答案

是的,您建议的解决方案可行。鉴于您正在 Java 环境中工作,将图像存储在数据库中是最好的方法。如果您在带有应用程序服务器的单服务器环境中运行,从技术上讲,该服务器允许您以分解格式进行部署,您可以将镜像存储在磁盘上,但这不是最佳实践。一种建议是使用 servlet 而不是 JSP。为了获得良好的浏览器行为,您希望浏览器认为它正在显示的文件类型与其期望的文件类型匹配。尽管存在 mime 类型 header ,文件扩展名仍然非常重要。所以您想要一个如下所示的链接:

<a href="foo.jsp"><img src="imageservlet/123456789.png"></a>

其中 123456789 是数据库中图像的主键。您的 servlet 映射将如下所示:

<servlet>
  <servlet-name>ImageServlet</servlet-name>
  <servlet-class>com.example.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>ImageServlet</servlet-name>
  <url-pattern>/imageservlet/*</url-pattern>
</servlet-mapping>

然后在您的 servlet 中只需解析图像 ID 的请求 URL,而不是使用查询字符串,因为查询字符串会使某些浏览器感到困惑。使用查询字符串不会彻底破坏浏览器,但您会在缓存方面遇到奇怪的行为,并且某些浏览器可能会将内容报告为不安全。

关于hibernate - 如何使用 Struts 2 + Hibernate 3 向浏览器提供图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/151100/

相关文章:

java - Hibernate 按内部 bean 的属性排序?

java - '无法添加或更新子行: a foreign key constraint fails' when trying to add a primary composite key in Hibernate

java - org.hibernate.AssertionFailure : possible non-threadsafe access to the session

java - 如何解决 Java awt/swing 图像打印中的滞后问题?

vba - 使用 VBA 在 Office 中压缩图像

javascript - 图像网格不加载图像(Ionic + AngularJS)

javascript - 如何使用 Struts2 从 Apache Tomcat 服务器动态更新 div 文本内容

java.lang.NoClassDefFoundError : org/hibernate/type/StandardBasicTypes - What could be the reason? 错误

html - Struts2 生成值 ="Submit",W3C 标记验证器认为这是一个错误

java - Struts2注解@RequestParameter