在JSP中显示文件系统存储的图像

时间:2012-12-14 04:39:21

标签: java image spring jsp tomcat

我正在尝试在webapp外部显示存储在本地文件系统中的图像。 以下问题:Simplest way to serve static data from outside the application server in a Java web application

编辑: 我希望文件在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中的下载路径,有没有办法将它们作为confign或设置信息提供?

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是复制图像并在您的Web应用程序根目录上提供。但是,如果此解决方案因任何原因不适合您,您始终可以创建一个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的请求将被分派到images proxy servlet