我正在尝试在我的网络应用程序之外显示存储在本地文件系统中的图像。 以下问题: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 中添加了上下文(遍历服务器->配置->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 中,有没有办法将它们作为配置或设置信息提供?
最佳答案
最简单的解决方案是复制图像并将其提供给您的网络应用根目录。但是,如果此解决方案出于某种原因不适合您,您始终可以创建一个 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 的请求将被分派(dispatch)到图像代理 servlet 中
关于java - 在 JSP 中显示文件系统存储的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13872748/