在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. Linux编程环境介绍(1) -- linux的历史

    1. linux是什么? "Hello everybody out there using minix——I'm doing a (free) operating system"  ...

  2. 执行eclipse,迅速failed to create the java virtual machine。

    它们必须在一排,否则会出现The Eclipse executable launcher was unable to locate its companion shared library的错误 打开 ...

  3. Android实现程序前后台切换效果

    本文演示如何在Android中实现程序前后台切换效果. 在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识. 我们都知道,一个Activity 可以启动另一个Act ...

  4. ssh命令

    使用ssh命令登陆远程系统 ssh [ip/address] -l [登陆用户名] 如: ssh www.xyz.cn -l root

  5. mysql常用操作(转自阿铭linux)

    在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,您还需要会一些基本的相关操作.当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些基本的操作已经可以应付 ...

  6. Fedora24安装常用软件方法

    # 添加chrome源 cd /etc/yum.repos.d/ # 下载google-chrome.repo并保存# wget  http://repo.fdzh.org/chrome/google ...

  7. using 关键字给类和名称空间指定别名

    1. using System; using System.Text; namespace DLL { public class Class1 { public void showStr() { Co ...

  8. (转)javascript组件开发方式

    作为一名前端工程师,写组件的能力至关重要.虽然javascript经常被人嘲笑是个小玩具,但是在一代代大牛的前仆后继的努力下,渐渐的也摸索了一套组件的编写方式. 下面我们来谈谈,在现有的知识体系下,如 ...

  9. Thread 常搞混的几个概念sleep、wait、yield、interrupt (转)

    原文网址:http://blog.csdn.net/partner4java/article/details/7993420sleep:在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到 ...

  10. 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量

    当团队对系统业务和数据库进行了细致的梳理,确定了切分方案后,接下来的问题就是如何去实现切分方案了,目前在sharding方面有不少的开源框架和产品可供参考,同时很多团队也会选择自主开发实现,而不管是选 ...