美文网首页
Servlet系列之(1) getRealPath、getRes

Servlet系列之(1) getRealPath、getRes

作者: Ethan_Walker | 来源:发表于2017-08-20 21:00 被阅读89次

    1. servletContext.getRealPath()

    Intellij Idea 目录结构

    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 根目录下


    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

    相关文章

      网友评论

          本文标题:Servlet系列之(1) getRealPath、getRes

          本文链接:https://www.haomeiwen.com/subject/fwtqdxtx.html