Servlet系列之(1) getRealPath、getRes
1. servletContext.getRealPath()
Intellij Idea 目录结构
image.png- 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\
-
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 根目录下
image.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