0

我正在尝试在我的 web 应用程序之外显示存储在本地文件系统中的图像。以下问题:在 Java Web 应用程序中从应用程序服务器外部提供静态数据的最简单方法

编辑: 我希望文件位于 webapp 之外,因为这些图像是由用户上传的,如果我将它们放在 webapp 中,我可能会在重新部署 web 应用程序时丢失它们

但该文件未显示在网页上。当我尝试通过以下方式打开文件时:localhost:8080/images/imageName.jpg 它给了我一个资源不可用的错误。

我在 server.xml 中添加了上下文(遍历 Servers->Config->server.xml):

 ........
 <Context docBase="DMSystemV1.0" path="/DMSystemV1.0" reloadable="true" source="org.eclipse.jst.jee.server:DMSystemV1.0"/>
      <Context docBase="/Projects/SpringExample/Images" path="/images"/>
      </Host>

我的 web.xml 也是这样的:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
   </servlet-mapping>
   <servlet>
    <servlet-name>DMSystem</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DMSystem</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

我希望它显示的地方:<img src="/images/${imagePath}" alt="Item's image">

Mytomcat 在:F:\Software\Servers\tomcat7\tomcat7 而镜像文件夹在:F:\Projects\SpringExample\Images

图像路径是相对于 tomcat 文件夹获取的吗?

另外,现在写我正在对上传路径(在我的上传 servlet 中)和 server.xml 中的下载路径进行硬编码,有没有办法将它们作为配置或设置信息提供?

4

1 回答 1

2

最简单的解决方案是复制图像并将其提供给您的网络应用根目录。但是,如果此解决方案由于某种原因不适合您,您始终可以创建一个 servlet 来“代理”您的图像:

创建一个 servlet,将其映射到一个路径,例如:

<servlet-mapping>
  <servlet-name>imageProxyServlet</servlet-name>
  <url-pattern>/imagesproxy/*</url-pattern>
</servlet-mapping>

然后在你的servlet类上,做一个文件IO来读取你的图片,然后把它写到响应中。不要忘记设置适当的内容类型,并使用缓冲的读/写来避免在图像很大的情况下占用你的内存。

然后您可以将您的图像作为http://mydomain.com/myapp/imagesproxy/something.jpg提供。对该 URL 的请求将被分派到图像代理 servlet

于 2012-12-14T04:49:27.153 回答