由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的某个项目的根

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值