zoukankan      html  css  js  c++  java
  • 由web项目中上传图片所引出的路径问题

    我在做javaweb项目的时候,有个项目中需要进行图片的上传,有次我重新部署项目后,发现之前上传的图片不见了,最后找出原因:图片上传在服务器目录上,而不是绝对路径,所以特别想弄清楚javaweb项目中有关路径的一些问题。


    首先,在做项目的时候我们最好用相对路径,如果写成绝对路径,当项目发布到其他环境时,绝对路径就错了。


    Java中传统方式取资源时,有很多的方法;


    先来看一看Class.getResource(String path),

    path 不以'/'开头时,默认是从此类所在的包下取资源;

    path  以'/'开头时,则是从ClassPath根下获取,在这里就是相当于项目的bin目录(Eclipse环境下);

    注意:Class.getResourceClass.getResourceAsStream(获取资源流)在使用时,路径选择上是一样的。


    再来看ClassLoader,即Class.getClassLoader().getResource(String path),

    path不能以’/'开头, path是从ClassPath根下获取,在这里就是相当于项目的bin目录(Eclipse环境下)

    注意:Class.getClassLoader().getResourceClass.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。


    -----------------------------------------------------------------------------------------------------------------------------

    手动分割线

    -----------------------------------------------------------------------------------------------------------------------------


    注意哦,上面说的是传统方式获取资源的方法,也就是在一般的java项目中,那么在web项目中呢?

    在web工程中,一般来说,是不能采用传统方式读取资源的,因为相对的是tomcat的bin目录,这也就是为什么图片上传在服务器目录上。


    首先我们要先了解web中通过servletContext对象读取资源文件,然后就好理解web工程中,不同位置的资源文件的读取方式;

    (在一个web工程中,只要涉及到写地址,建议最好以/开头)


    第一点:使用ServletContext的getRealPath(String path)方法,获得文件的完整绝对路径path,再使用字节流读取path下的文件;

    第二点:使用ServletContext的getResourceAsStream(String path)方法:返回资源文件的读取字节流;

    第三点:使用ServletContext的getResource(String path)方法,获得一个url对象,调用该类的openStream方法返回一个字节流,读取数据;

    第四点:还可以使用ServletContext的getResourcePaths(String Path)获取指定目录下所有资源路径;


    好了,了解了ServletContext,现在就能用它在web项目中进行不同位置的资源文件的读取了,用例子来说明:

    项目目录:


    tomcat中的此项目目录:

    miniblog目录:


    WEB-INF目录:


    classes目录:



    读取jdbc.properties(当资源文件在包下面时),

    InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/classes/jdbc.properties");


    读取web.xml(资源文件在WEB-INF下),

    InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/web.xml");


    读取adminuser.jsp(资源文件在web工程中),

    InputStream in =this.getServletContext().getResourceAsStream("/adminjsps/adminuser.jsp");


    好了,这些就是我了解到的了~


    注意:普通java项目和javaweb项目所对应的基本路径是不一样的,普通java项目对应的是eclipse工作空间的某个项目的bin目录,而javaweb项目则是tomcat的某个项目的根

    目录;所以,取路径,取资源的方式都有所区别。

  • 相关阅读:
    ps命令
    关于typedef的用法总结
    C#中正则表达式的使用
    调试与编译
    大端和小端
    64位程序内存之我看
    C/C++内存泄漏及检测
    内核中的 likely() 与 unlikely()
    do/while(0) c4127
    django+xadmin在线教育平台(六)
  • 原文地址:https://www.cnblogs.com/Arry10/p/7731802.html
Copyright © 2011-2022 走看看