从WebContent / IMAGES /而不是WEB-INF读取文件

时间:2015-05-19 09:39:39

标签: servlets

我在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读取文件。使用真实路径可以实现。我该怎么办?我咨询了相关的帖子。

  1. getresourceasstream-is-always-returning-null
  2. access-file-inside-webcontent-from-servlet
  3. java-tomcat-servletcontext-getresourceasstream-problems

1 个答案:

答案 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" />

另见: