Servlet系列之(1) getRealPath、getResourceAsStream、getContextPath

1. servletContext.getRealPath()

Intellij Idea 目录结构

4262551-483d9e47e8aff1ec.png

image.png

  1. getRealPath("")
  • 在 Intellij Idea 下
    F:\6_workspace\intellij_idea\12-Remind\out\artifacts\12_Remind_war_exploded\

  • 在Eclipse 下可能是:
    F:\3_Server\tomcat\apache-tomcat-9.0.0.M21\webapps\contextPath\

  1. getRealPath("")拼接路径的方法仅仅是:
    在原有基础路径后添加查找路径, 而不管真实文件是否存在

    例:
getRealPath("/demo.txt")
 F:\6_workspace\intellij_idea\12-Remind\out\artifacts\12_Remind_war_exploded\demo.txt

即使demo.txt 不在 src 根目录下,仍然拼接成该路径
实际上src下的 demo.txt 对应的路径应该是:
F:\6_workspace\intellij_idea\12-Remind\out\artifacts\12_Remind_war_exploded\WEB-INF\classes\demo.txt

解决:getRealPath("/WEB-INF/classes/demo.txt")

**故获取项目下资源时,都要添加 /WEB-INF/classes/ **

例:
demo.txt 在 src 根目录下

 

4262551-99de8d245541d269.png

image.png

 

部署路径:

 

4262551-ea06261aab4bb5b2.png

获取到实际资源路径:
getServletContext().getRealPath("/WEB-INF/classes/demo.txt")

2. servletContext.getResourceAsStream("");

根据文件的路径获取流, 参数的路径
例如,同上,获取 src 根目录下的 demo.txt,demo.txt 最终被部署时,文件相对路径是 /WEB-INF/classes,
InputStream is1 = getServletContext().getResourceAsStream("/WEB-INF/classes/demo.txt");

只能使用相对路径,不能通过绝对路径获取项目下资源

3.class.getResource("")

this.getClass().getResource("/demo.txt") 表示获取的是classpath 即 src下的 demo.txt 文件, / 表示 classpath

如果没有 / , 即 getResource("demo.txt") 表示获取的是与当前类在同一个包下的 demo.txt

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值