我正在尝试在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或设置信息提供?
答案 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
中