文档章节

用ClassLoader获取资源

JerryYux
 JerryYux
发布于 2014/08/30 11:20
字数 334
阅读 449
收藏 9

最近在写Servlet的时候,看到之前的代码里都是这样写的:

InputStream is = xxx.class.getResourceAsStream(filePath);

但是我用另一种写法:

ClassLoader.getSystemResourceAsStream(filePath);

在本地测试的时候也是行得通的,于是把Servlet扔到服务器上,但是到了服务器上,第二种写法就跑不通了。今天找到了下面这个文章:

    

ClassLoader.getSystemResourceAsStream and this.getClass().getClassLoader().getResourceAsStream()  


ClassLoader.getSystemResourceAsStream uses the system ClassLoader (ClassLoader.getSystemClassLoader) to search for the resource.
this.getClass().getClassLoader().getResourceAsStream() uses the same ClassLoader that loaded the class for "this" Object. That ClassLoader might be a child of the system ClassLoader, and thus could have access to resources the system ClassLoader does not have. But since it is a child of the System ClassLoader, it also will ask its parent (System) to help it find resources. So using this method will allow you to find things in that ClassLoader AND in the System ClassLoader.
The search order is defined in the javadoc for ClassLoader.getResource (parent(s) first, then child).
For example, say you were running some code from a Servlet. The System ClassLoader contains whatever you put in CLASSPATH when you started the Web Server, but the servlet class is probably loaded by another ClassLoader that the server created to handle the WebApp's WEB-INF/lib and WEB-INF/classes directories. Things in those directories would be accessible using that WebApp's ClassLoader, but would not be in CLASSPATH - so the System ClassLoader does not know about them.
I'm not sure I explained that well - hope it helps.

So if you want to get properties from a static method, it's better to use:
SomeClass.class.getClassLoader().getResourceAsStream("XX.properties"));


文章的地址:http://yaodong.yu.blog.163.com/blog/static/121426690200961282221588/

本文转载自:http://yaodong.yu.blog.163.com/blog/static/121426690200961282221588/

JerryYux
粉丝 3
博文 18
码字总数 8418
作品 0
杭州
程序员
私信 提问
Class和ClassLoader.getResource获取资源

资源就是系统内、项目内的各种文件。在Java中获取可以用File类和Class.getResource获取资源,直观的说,File是依赖于文件系统和操作系统的,通过相对和绝对路径定位,使用File接口可以用于获...

lonewolfxuwei
2014/05/15
0
0
系统、当前与线程上下文类加载器

来自:http://www.javaworld.com/article/2077344/core-java/find-a-way-out-of-the-classloader-maze.html 问题:应该在什么时候使用线程上下文加载器? 回答: 虽然不经常被问起这个问题,...

weipeng2k
2018/01/06
0
0
Java 加载资源文件

简介 Java中获取资源的最常用的2中方式就是使用Class的getResource和使用ClassLoader的getResource方法,当然还有它们相关的方法。这里就介绍一下使用这2中方式的区别,和它们搜索使用的路径...

trayvon
2016/12/03
191
0
java获取路径

JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别 Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。 例如你写了一个MyTes...

浮躁的码农
2016/02/22
16
0
getResourceAsStream读取文件

首先看看项目目录结构 1、利用Class.getResourceAsStream(String path) path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对...

_Roger_
2016/02/20
204
0

没有更多内容

加载失败,请刷新页面

加载更多

Supervisor-守护进程工具

进程管理工具(Supervisor) 简介 Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或...

鬼方赤命
26分钟前
4
0
ajax与Fetch

一、ajax 使用步骤 1.创建XmlHttpRequest对象 2.调用open方法设置基本请求信息 3.设置发送的数据,发送请求 4.注册监听的回调函数 5.拿到返回值,对页面进行更新 //1.创建Ajax对象 if(...

Bing309
30分钟前
4
0
Nginx正则配置

Nginx配置中Location的语法规则 location [ = | ~ | ~* | ^~ | !~ | !~* ] /uri/{ … } = 表示精确匹配 ~ 表示区分大小写正则匹配 ~* 表示不区分大小写正则匹配 ^~ 表示URI以某个常规字符串开...

NoodlesMars
34分钟前
21
0
数组

1. 二维数组的查找 https://my.oschina.net/u/3973793/blog/3097920 2. 数组中重复的数字 https://my.oschina.net/u/3973793/blog/3106083 3. 构建乘积数组 https://my.oschina.net/u/39737......

Garphy
35分钟前
5
0
JS中的七大数据类型

在JavaScript中变量包含两种类型的值:一种是基本类型,一种是引用类型。任何不属于基本类型的东西都属于对象。 基本类型包括:Null、Undefined、Number、String、Boolean、Symbol(ES6新增)...

蓝小驴
39分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部