目前,我的 .war 文件中有一堆图像,如下所示。
WAR-ROOT
-WEB-INF
-IMAGES
-image1.jpg
-image2.jpg
-index.html
当我通过 servlet/jsp/etc 生成 html 时,我可以简单地链接到
http://host/contextroot/IMAGES/image1.jpg http://host/contextroot/IMAGES/image1.jpg
and
http://host/contextroot/IMAGES/image1.jpg http://host/contextroot/IMAGES/image1.jpg
不是我正在编写一个 servlet,它需要获取这些图像的文件系统引用(在本例中渲染出复合 .pdf 文件)。有没有人建议如何获取对战争中放置的文件的文件系统引用,类似于这样?
这可能是我在 servlet 初始化时获取的 url?显然我可以有一个明确指向安装目录的属性文件,但我想避免额外的配置。
如果你能保证WAR被展开,那么你可以使用ServletContext#getRealPath() http://download.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath%28java.lang.String%29将相对 Web 路径转换为绝对磁盘文件系统,您可以在通常的 Java IO 内容中进一步使用它。
String relativeWebPath = "/IMAGES/image1.jpg";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
InputStream input = new FileInputStream(file);
// ...
但是,如果您不能保证 WAR 已展开(即所有资源仍然打包在 WAR 内),并且您实际上对绝对磁盘文件系统路径和您的所有内容不感兴趣,实际上需要只是一个InputStream
出来,然后使用getServletContext().getResourceAsStream() http://download.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getResourceAsStream%28java.lang.String%29反而。
String relativeWebPath = "/IMAGES/image1.jpg";
InputStream input = getServletContext().getResourceAsStream(relativeWebPath);
// ...
也可以看看:
- getResourceAsStream() vs FileInputStream https://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)