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

1. servletContext.getRealPath()

Intellij Idea 目录结构

Servlet系列之(1) getRealPath、getResourceAsStream、getContextPath_第1张图片
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 根目录下


Servlet系列之(1) getRealPath、getResourceAsStream、getContextPath_第2张图片
image.png

部署路径:


Servlet系列之(1) getRealPath、getResourceAsStream、getContextPath_第3张图片

获取到实际资源路径:
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

你可能感兴趣的:(Servlet系列之(1) getRealPath、getResourceAsStream、getContextPath)