Java 如何创建tempdir-tomcat的虚拟路径?

Java 如何创建tempdir-tomcat的虚拟路径?,java,tomcat,grails,Java,Tomcat,Grails,我想把我的图像到数据库,但我想有一个对每个图像的链接。 因此,我有了将图像复制到tomcat(或weblogic)的temp dir的想法。 但我必须将tempdir映射到一个虚拟路径 怎么做?只需创建一个servlet,并在其doGet方法中提供一个二进制图像内容(内容类型:image/jpeg或gif) 确保在HttpServletResponse中设置以下字段: 埃塔格 最后修改 内容类型 内容长度 然后将映像二进制文件作为HttpServletResponse的主体重新运行,将其直接

我想把我的图像到数据库,但我想有一个对每个图像的链接。 因此,我有了将图像复制到tomcat(或weblogic)的temp dir的想法。 但我必须将tempdir映射到一个虚拟路径


怎么做?

只需创建一个servlet,并在其
doGet
方法中提供一个二进制图像内容(内容类型:image/jpeg或gif)

确保在HttpServletResponse中设置以下字段:

  • 埃塔格
  • 最后修改
  • 内容类型
  • 内容长度
然后将映像二进制文件作为HttpServletResponse的主体重新运行,将其直接写入通过
HttpServletResponse.getOutputStream
获得的流

您可以将图像ID作为URL参数传递给这个servlet,这样您就可以通过同一个servlet提供不同的图像。您甚至可以在磁盘上缓存映像,但因为您有一个servlet,所以您可以在没有虚拟映射的情况下设置临时目录

编辑


实际上,您可以创建几个到此servlet的虚拟映射,并在servlet
doGet
方法中检查上下文路径并基于该上下文路径名称提供图像。

只需创建一个servlet,并在其
doGet
方法中提供二进制图像内容(内容类型:image/jpeg或gif)

确保在HttpServletResponse中设置以下字段:

  • 埃塔格
  • 最后修改
  • 内容类型
  • 内容长度
然后将映像二进制文件作为HttpServletResponse的主体重新运行,将其直接写入通过
HttpServletResponse.getOutputStream
获得的流

您可以将图像ID作为URL参数传递给这个servlet,这样您就可以通过同一个servlet提供不同的图像。您甚至可以在磁盘上缓存映像,但因为您有一个servlet,所以您可以在没有虚拟映射的情况下设置临时目录

编辑


实际上,您可以创建几个到该servlet的虚拟映射,并在servlet
doGet
方法中检查上下文路径并基于该上下文路径名称提供图像。

谢谢,但如果我想显示多个文件,DB连接可能不是最好的方式?@quilovnic:我不理解您对DB的担忧连接。如果db性能允许,直接从数据库提供图像,如果您认为可以从缓存中获益,则将其缓存在Servlet容器中(磁盘上的临时目录,或者如果没有太大的增长,则只缓存在应用程序内存中)。请注意,对磁盘的读/写操作将引入其自身的I/O瓶颈,在某些情况下,您的应用程序可能会花费所有时间等待磁盘I/O完成。因此,您认为如果我从DB打开大量文件,DB性能不会受到影响?正如您所说,我想创建一个缓存。但是如果我的文件很大@奎洛夫尼克。我想说的是,无论是否使用缓存,您都需要进行性能测试,如果您看到性能因磁盘I/O而受到影响,尤其是在磁盘上存储大型文件时,请不要感到惊讶。我只建议您使用一个servlet向客户机呈现图像。这使得存储抽象更容易完成,因为最终你的客户并不真正关心原始图像的位置。谢谢,但是如果我想显示多个文件,DB连接可能不是最好的方式?@quilovnic:我不理解你对DB连接的担忧。如果db性能允许,直接从数据库提供图像,如果您认为可以从缓存中获益,则将其缓存在Servlet容器中(磁盘上的临时目录,或者如果没有太大的增长,则只缓存在应用程序内存中)。请注意,对磁盘的读/写操作将引入其自身的I/O瓶颈,在某些情况下,您的应用程序可能会花费所有时间等待磁盘I/O完成。因此,您认为如果我从DB打开大量文件,DB性能不会受到影响?正如您所说,我想创建一个缓存。但是如果我的文件很大@奎洛夫尼克。我想说的是,无论是否使用缓存,您都需要进行性能测试,如果您看到性能因磁盘I/O而受到影响,尤其是在磁盘上存储大型文件时,请不要感到惊讶。我只建议您使用一个servlet向客户机呈现图像。这使得存储抽象更容易完成,因为最终您的客户机并不真正关心原始图像驻留在何处。