Web环境下instance.getClass().getClassLoader().getResource(String path)路径问题

项目目录如下

goods

-WebRoot

-WEB-INFO

-lib

-classes

-com

-lang

-user

-user.java

-service

-service.java

-1.properties

-2.properties

-web.xml

-js

-css

-index.jsp

-META-INFO

-src

-com

-lang

-user

-user.class

-service

-service.class

-1.properties

-2.properties


下面以service层为例来获取配置文件:

Service service = new Service();

// 1.当前类的包路径

URL s1 = service.getClass().getResource("");

// file:/E:/MyEclipseWorkspace/goods/WebRoot/WEB-INF/classes/com/lang/service/

System.out.println(s1);


// 2.如果这个name是以 '/' 开头的,那么就会从classpath的根路径下开始查找。

URL s2 = service.getClass().getResource("/");

// file:/E:/MyEclipseWorkspace/goods/WebRoot/WEB-INF/classes/

System.out.println(s2);


// 3. ClassLoader.getResourceAsStream()  无论要查找的资源前面是否带'/' 都会从classpath的根路径下查找

URL s3 = service.getClass().getClassLoader().getResource("");

// file:/E:/MyEclipseWorkspace/goods/WebRoot/WEB-INF/classes/

System.out.println(s3);


// 4. ClassLoader.getResourceAsStream()  路径中不可以带"/"

URL s4 = service.getClass().getClassLoader().getResource("/");

// null

System.out.println(s4);



// 例如获取1.properties文件

URL s5 = service.getClass().getResource("1.properties");

// 或者

URL s6 = service.getClass().getClassLoader().getResource("1.properties");

s5 = s6 = file:/E:/MyEclipseWorkspace/goods/WebRoot/WEB-INF/classes/1.properties

// 获取该文件的流形式

InputStream ins1 = service.getClass().getResourceAsStream("/goods.sql");

// 或者 

InputStream ins2 = service.getClass().getClassLoader().getResourceAsStream("goods.sql");


/*

* 总结

1. Class.getResource(String path) :

path 不以'/'开头时默认是从此类所在的包下取资源,以'/'开头则是从ClassPath(classes目录下)根下获取。

其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。

 

2. Class.getClassLoader.getResource(String path) :

默认则是从ClassPath根下获取,path不能以'/'开头,最终是由ClassLoader获取资源。

 

3. ServletContext. getResourceAsStream(String path):

默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓,当然这和具体的容器实现有关。

 

*/

 


你可能感兴趣的:(Web环境下instance.getClass().getClassLoader().getResource(String path)路径问题)