classpath类路径详细分析

2017-11-22  本文已影响0人  再闹砸你家窗户
   最近在做一个功能,需要通过ip获取当前用户所在的城市和和省份,需要读取一个Geolite.mmdb的文件,该文件需要放在工程内部,通过相对路径来加载。折腾了半天才搞定,原因是对classpath不理解,特整理了一些classpath的相关知识,希望能帮助到一些和我一样的新手。 
    开门见山:classpath是指打包后WEB-INF文件夹下的classes目录。
    典型的war包内部结构如下:
    webapp.war
             |— index.jsp                       //健康检查文件
             |— META-INF                     //maven自动生成目录
             |— WEB-INF                      //必含
                      |— web.xml               // WAR包的描述文件
                      |— classes                //classpath
                      |— lib                        //依赖的jar包

      WEB-INF是资源目录,客户端不能直接访问,不过现在的ide编译器在编译时会把src目录下的非java文件移到WEB-INF/classes下面。所以Resource目录下的资源都会被打包到/WEB-INF/classes文件夹下。

      classes目录是一个定位资源的入口,里面存放的文件类型大致可以分为几类:
      (1)存放项目中src目录下的编译文件;
      (2)存放各种资源配置文件:log4j.properties
      (3)存放各种模板文件:some.ftl

       java中获取类路径的方法,可以通过类加载器:Class.getClassLoader().getResource("").getPath()
       例如:放置resources目录下common/GeoLite2-City.mmdb文件,可以通过如下方式获取它的资源路径:
                  String path = Class.getClassLoader().getResource("").getPath + "common/GeoLite2-City.mmdb"

       Spring中引用classpath路径下的文件,只需要在文件名前加上classpath。如:
       @PropertySource("classpath:conf/webapp.properties")
上一篇下一篇

猜你喜欢

热点阅读