我在Java Web应用程序中有以下结构:
TheProject
-- [WebContent]
-- -- [WEB-INF]
-- -- index.jsp
-- -- [IMAGES]
-- -- -- image.jpg
-- [Source Packages]
----ImageHandlerServlet.java
在ImageHandlerServlet.java中,我使用以下代码
String path = getServletContext().getRealPath("/Images");
其中给出了以下路径。 d:\ BH \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ TMP0 \ wtpwebapps \凸出\ IMAGES
URL path2 =getServletContext().getResource("/image.jpg");
返回null。
InputStream stream = getServletContext().getResourceAsStream("/image.jpg");
返回null;
我想从WebContent / IMAGES /而不是WEB-INF读取文件。使用真实路径可以实现。我该怎么办?我咨询了相关的帖子。
答案 0 :(得分:4)
ServletContext#getResource()
和getResourceAsStream()
采用相对于网络内容的路径。从那时起,您的图像实际上位于/IMAGES/image.jpg
。
InputStream stream = getServletContext().getResourceAsStream("/IMAGES/image.jpg");
注意,您应该永远在webcontent资源上使用getRealPath()
或File
API。
还应注意,当您打算提供图像时,不需要使用servlet。当放在私有/WEB-INF
文件夹之外时,它们就像在JSP中一样可公开访问:
<img src="${pageContext.request.contextPath}/IMAGES/image.jpg" />
或在Facelets中:
<img src="#{request.contextPath}/IMAGES/image.jpg" />
或者使用JSF:
<h:graphicImage value="/IMAGES/image.jpg" />