J2EE之普通类加载web资源文件的方法

在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);
	}

}

采用这种方式获取资源文件时,在服务器启动时,资源文件只会被类加载器加载一次,以后不会再次加载,也是就是说当我修改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。然后重新启动服务器。

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

结果如下:

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

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

J2EE之普通类加载web资源文件的方法

时间: 2024-10-24 12:44:39

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

小谈——读取web资源文件的方式和路径问题

读取web资源文件的方式 a): 采用servletContext对象获得. 优点: 任意文件,任意路径都可获得 缺点: 必须在web环境下 // 拿到全局对象 ServletContext sc = this.getServletContext(); // 获取p1.properties文件的路径 String path = sc.getRealPath("/WEB-INF/classes/p1.properties"); b): 采用resourceBundle获得 优点: 非we

servlet和普通类获取资源文件的方法

package cn.servlet.demo1; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties; import javax.servlet

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

lassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. ClassLoader负责载入系统的所有资源(Class,文件,图片,来自网络的字节流等),通过ClassLoader从而将资源载入JVM 中.每个class都有一个引用,指向自己的ClassLoader. 1. 获得ClassLoader的几种方法 可以通过如下3种方法得到ClassLoader : [java] view pl

加载web资源文件

servlet编程: 1.servlet生命周期: 构造方法:创建servlet对象.默认情况下,第一次访问servlet对象时.只调用一次. init方法(有参):创建完servlet对象后调用.只调用一次. 注意:会调用无参的init方法 servlet方法:servlet提供服务的方法,每次发出请求调用. 注意:request对象,response对象 destory方法:tomcat服务器停止或web应用重新部署,servlet对象销毁,destory方法被调用 2.servletCon

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

转http://www.jb51.net/article/84660.htm 本文分别介绍了使用GetManifestResourceStream读取嵌入资源,和使用. resx资源文件嵌入资源,希望对大家有所帮助. Dotnet中嵌入资源(位图.图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过Assembly的GetManifestResourceStream方法获取资源的Stream.另一种方法是在项目中加入. resx资源文件,在资源文件中添加资源,由Re

DELPHI RES资源文件使用方法

1.创建自定义控件的图标 首先用imagetools创建一个dcr文件,然后插入一个bitmap,bitmap名称为如TUV_Rect,画好bitmap后保存整个dcr文件到组件pas文件所在目录,并保存名称为类名去t,然后在该组件中加入预编译指令{$R UV_RECT.dcr},这样重新编译组件即可. 2.组件中需要用到窗体资源等的方法 首先在FORM上放置各类控件,然后显示view as text,从中拷贝指定控件资源中的内容如 object RoundRect1: TRoundRect P

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

这里总结3中方法获取资源文件的 ServletContext Class ClassLoader 文件的位置 1. ServletContext public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw = response.getWriter(); ServletContext context

访问jar包内部资源文件的方法

如果在jar中需要访问jar包内部的某个资源文件,可以用class.getResourceAsStream(文件路径)获取文件内容. 假设文件路径是project/src/com/zh/resource, code如下: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Uns

Spring-访问静态资源文件的方法

转自:  http://blog.163.com/zhangmihuo_2007/blog/static/27011075201453044959574?suggestedreading 如果你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了. 通过上面url-pattern的配置,所有URL请求都将被Spring MVC的Dispa