如何获得图像绝对路径?

时间:2010-07-08 15:54:31

标签: java jsp

如何在java中获取图像路径?

我正在使用eclipse,我想在jsp中显示图像,我想提供类似“/images/logo.jpg”的路径,但是在执行页面时它会获得nullpointer异常。

如果我给出了完整路径,它的工作方式就像“d:/project/images/logo.jsp”。如何以绝对路径显示图像?

2 个答案:

答案 0 :(得分:4)

您应该尽可能避免在java.io内容中使用相对路径。任何相对路径都将相对于当前工作目录,这取决于您启动应用程序的方式,并且无法从代码内部无法控制。当以例如开始时一个Tomcat服务,它将相对于c:/path/to/tomcat/bin。在Eclipse中运行时,它将相对于c:/path/to/eclipse/project/bin。在命令控制台中运行时,它将相对于当前打开的文件夹。等等。你不想依赖它。不好的主意。

对于JSP / Servlet Web应用程序,基本上有两种方法可靠地使用相对路径获取绝对资源路径:

  1. 运行时类路径(所有类和库所在的位置)检索它:

    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    String path = classLoader.getResource("/images/logo.jpg").getPath();
    
  2. webcontent (所有JSP文件和/WEB-INF文件夹所在的位置)检索它:

    ServletContext context = getServletContext(); // Inherited from HttpServlet.
    String path = context.getResource("/images/logo.jpg").getPath();
    
  3. 如果您最终想要的是InputStream,而您可能希望使用new FileInputStream(path)创建,那么您应该使用getResourceAsStream()方法:

    1. 来自classpath:

      InputStream content= classLoader.getResourceAsStream("/images/logo.jpg");
      
    2. 或webcontent:

      InputStream content = context.getResourceAsStream("/images/logo.jpg");
      

答案 1 :(得分:1)

而不是/images/logo.jpg put images/logo.jpg,即删除第一个斜杠。