在WEB中普通类并不能像Servlet那样通过this.getServletContext().getResourceAsStream()获取web资源,须要通过类载入器载入,这里有两种方式,这两种方式是有差别的,下载咱们一起来看一下吧。

方法1.

public class UserDao {

	public void connect() throws IOException {

		method1();
} private void method1() throws IOException {
InputStream in = UserDao.class.getClassLoader().getResourceAsStream("db.properties");
Properties props = new Properties();
props.load(in); String url = props.getProperty("url");
String username = props.getProperty("username");
String password = props.getProperty("password"); System.out.println("url : " + url);
System.out.println("username : " + username);
System.out.println("password : " + password);
} }

採用这样的方式获取资源文件时,在server启动时,资源文件仅仅会被类载入器载入一次,以后不会再次载入,也是就是说当我改动WEB资源文件数据时,最后输出的数据不会发生改变,还是和改动之前的数据一样。

測试:

我这里的WEB资源文件为db.properties文件。

当我每次改动url的值为card,card111,card222时,控制台输出的结果都为card。

这里须要注意,改动的db.properties文件必须是web项目公布以后,去tomcat文件夹下改动,假设你改动Myeclipse中的db.properties文件是没有不论什么意义的,由于项目公布以后,src下的全部文件都会被copy到tomcat  WEB应用文件夹下,如图:

每次改动完db.properties文件,保存,然后刷新网页,Myeclpse不要做不论什么操作。

控制台输出结果:

方法2:

public class UserDao {

	public void connect() throws IOException {

		method2();
} private void method2() throws IOException { String path = UserDao.class.getClassLoader().getResource("db.properties").getPath();
FileInputStream in = new FileInputStream(path);
Properties props = new Properties();
props.load(in); String url = props.getProperty("url");
String username = props.getProperty("username");
String password = props.getProperty("password"); System.out.println("url : " + url);
System.out.println("username : " + username);
System.out.println("password : " + password);
} }

首先将tomcat文件夹下的db.properties文件url值改回card。然后又一次启动server。

再次改动url的值为card,card111,card222

结果例如以下:

这里我还有个疑问就是,我这里用的是Tomcat6,假设换做tomcat7的话,你每次改动资源,这两种方法都会再次载入,也就是输出的结果即为你改动的值。

究竟是为什么呢?有木有大神做下深入一点的解答

J2EE之普通类载入web资源文件的方法的更多相关文章

  1. Java中用ClassLoader载入各种资源(类、文件、web资源)的方法

    lassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. ClassLoader负责载入系 ...

  2. java web 资源文件读取

    前提:假设web应用test(工程名) webapps下面有一资源文件test.html 规则:在获取资源时一般使用的是相对路径,以符号/开头,而 / 代表什么取决于这个地址给谁使用.服务器使用时,/ ...

  3. Web资源文件的加载

    一.关于页面跳转的一下几种方法: package com.gqx.load; import java.io.IOException; import java.io.PrintWriter; impor ...

  4. Struts2 之 Action 类访问 WEB 资源

    接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案.当然,如果读者发现任何问题均可以在下方评论告知我,先谢! 在 Action 中访问 WEB 资源 web 资源 所 ...

  5. C#使用资源文件的方法

    其实,对于资源文件的使用,说白点就是通过强制类型转换,将资源文件里的数据强行的转换成你需要的(换种方式说,就是你原来存进去什么,就用什么类型拿出来). 主要通过System.Resources.Res ...

  6. 在.NET中读取嵌入和使用资源文件的方法

    转http://www.jb51.net/article/84660.htm 本文分别介绍了使用GetManifestResourceStream读取嵌入资源,和使用. resx资源文件嵌入资源,希望 ...

  7. 【java】获取解析资源文件的方法

    关于资源文件的读取,有很多种方法,下面补充了多种方法 1.java.util.ResourceBundle 使用java自带的util包下的ResourceBundle类获取,使用方法最简单 //获取 ...

  8. Java中获取资源文件的方法总结

    这里总结3中方法获取资源文件的 ServletContext Class ClassLoader 文件的位置 1. ServletContext public void doGet(HttpServl ...

  9. java读取项目资源文件的方法

    1.把资源文件放在项目的Resource文件夹下,并使其设置成为资源文件夹(通过idea或者eclise)2. Thread.currentThread().getContextClassLoader ...

随机推荐

  1. Andriod Studio科学文章——4.常见问题解答有关编译

    1.android未安装支持库 只有编译,下面的例子演示了提样: Could not find any version that matches com.android.support:appcomp ...

  2. 利用扩展双屏技术及Chrome浏览器,高速剖析优秀网页Div及CSS构成,并高效实现原型创作

    作为一个Web前台设计人员,应该充分利用可利用的硬件条件及专业的软件工具,迅速进入到高效氛围其中.实践中,我们能够利用扩展桌面双屏技术及Chrome浏览器高速剖析优秀网页Div及CSS构成,并高速实现 ...

  3. easyUI的datagrid控件日期列不能正确显示Json格式数据的解决方案

    EasyUI是一套比较轻巧易用的Jquery控件,在使用过程中遇到一个问题,它的列表控件——datagrid, 在显示日期列的时候,由于后台返回给页面的数据是Json格式的,其中的日期字段,在后台是正 ...

  4. WebApi2官网学习记录---单元测试

    如果没有对应的web api模板,首先使用nuget进行安装 例子1: ProductController 是以硬编码的方式使用StoreAppContext类的实例,可以使用依赖注入模式,在外部指定 ...

  5. IL(Intermediate Language)

    释义: IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU ...

  6. String new赋值、直接赋值

    String类是final的.String str = new String("Hello"); //创建了两个对象系统会先创建一个匿名对象"Hello"存入堆 ...

  7. 定义了重复的system.web.extensions/scripting/scriptResourceHandler怎么办

    今天移转系统,都配置好之后,系统报错说我的web服务下的web.config 定义了重复的 system.web.extensions/scripting/scriptResourceHandler ...

  8. C#中弹出新窗口

    1.在主窗体程序中定义对应别的窗体的对象 Form_a_class form1 = Form_a_class  test_delegate(); 2.调用显示 form1.ShowDialog();

  9. 三组I/O复用模型的比较

    概论: select.poll和epoll三组I/O复用系统调用,这3组系统调用都能同时监听多个文件描述符.它们将等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回. ...

  10. Hadoop1.2.1伪分布模式安装指南

    一.前置条件 1.操作系统准备 (1)Linux可以用作开发平台及产品平台. (2)win32只可用作开发平台,且需要cygwin的支持. 2.安装jdk 1.6或以上 3.安装ssh,并配置免密码登 ...