在我的 Web 应用程序中,我想上传图像并因此使用 p:graphicImage 呈现它们。我将上传的图像存储在 Web 应用程序之外——尤其是在 E:\webapp\upload。请注意,我的 tomcat 服务器安装在 E: 卷上。我创建了一个 ImageServlet 来读取http://balusc.blogspot.com/2007/04/imageservlet.html中描述的图像。
我在 web.xml 文件中添加了以下配置:
<servlet>
<servlet-name>imageServlet</servlet-name>
<servlet-class>utilities.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>imageServlet</servlet-name>
<url-pattern>/upload/*</url-pattern>
</servlet-mapping>
我可以使用“upload/imageName.ext”从 index.xhtml 页面访问图像,例如:
<p:graphicImage value="upload/flag.gif" />
此 jsf 代码正确转换为以下 HTML 代码:
<img src=”http://localhost:8080/MyApp/upload/flag.gif?pfdrid_c=true”>
但是,我希望能够从包含在子文件夹中的页面访问图像。例如,我有一页位于“admin”子文件夹中:
http://localhost:8080/MyApp/admin/language.xhtml
在该页面内,相同的 jsf 代码被转换为:
<img src=”http://localhost:8080/MyApp/admin/upload/flag.gif?pfdrid_c=true”>
这是错误的。
换句话说,它会在“E:\webapp\admin\upload”目录中查找不存在的图像,因此不会显示任何内容。我可以清楚地写出以下代码:
<p:graphicImage value="../upload/flag.gif" />
为了使它工作,但我认为这是一种不好的做法,因为每次我在不同的子文件夹层次结构中时都必须采用该路径(例如考虑嵌套子文件夹的问题)。
我想知道是否有任何方法可以指定图像的相对路径,例如“upload/flag.gif”,而不管子文件夹层次结构如何。
提前致谢!