Java-web底层技术回顾之: Servlet获取当前web应用下的资源API

4 篇文章 0 订阅

servlet读取web应用下的资源文件相关问题记录

在java web中通过servletContext接口中定义的一系列方法可以获取到web应用下的资源文件。这些方法需要依靠servlet容器提供功能:

getResourcePaths方法

该方法

Set getResourcePaths(String path)

该方法返回一个Set集合,集合中包含资源目录中子目录和文件的路径名称。参数path必须以正斜线(/)开始,指定匹配资源的部分路径。

在测试中遇到以下几点问题:

  • 该方法实际会以/WEB-INF/为根目录进行遍历,所以当path参数为/时,其返回的为/WEB-INF/下的所有文件及目录的集合

测试1:

Set<String> resources = getResourcePaths("/"); ---> 输出: [/WEB-INF/]

从结果中可以看出,该方法以/WEB-INF/为根目录进行向下搜索的。

测试2:
在web-inf目录下加入资源目录及文件:
/WEB-INF/images/...

Set<String> resources = getResourcePaths("/"); ---> 输出: [/WEB-INF/]

总结: 该方法只会返回/WEB-INF/。(此处有疑问)该方法如果传入的是在classes下的资源时并不会返回资源目录下的资源集合,只会返回null,所以该方法并不能在classes目录中中生效(此处也有疑问)

getRealPath

该方法API即:

String getRealPath(String path);

该方法以正斜线(/)开始,/表示当前web应用的根目录,如果serlvet无法将虚拟路径转换为文件系统的真实路径,则返回null,这个方法返回一个文件在服务器上的真实路径(文件的绝对路径)。

String realPath = getRealPath("/image/image.jpg") ---->  C:\Users\Linux\Desktop\idea\heiketu\src\main\webapp\images\image.jpg
  • 这个方法会返回一个文件所在的绝对路径(文件绝对路径,即在服务器上的绝对位置)。

getResource

此方法API为:

URL getResource(String path);

此方法返回映射到某个资源文件的URL对象,参数path与getResourPaths相同,必须要以/开始,/表示当前Web应用的根目录。
测试结果:

URL resource = context.getResource("/");
System.out.println("[返回的资源URL] ---: " + resource); ----> [返回的资源URL] ----: [返回的资源URL] ---: jndi:/localhost/main/

这个方法范围的是文件的URL地址,如果传入的是具体文件,则会返回null(这个有存疑)

getResourceAsStream

方法的API为

InputStream getResourceAsStream(String path);

该方法会从项目的根路径进行查找,返回资源文件的输入流对象。
这个api接收参数与getResource方法的接收参数相同,必须以/开始,从项目根路径进行查找。如果传入的是绝对路径则会抛出NullException异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值