Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530263
  • 博文数量: 135
  • 博客积分: 3568
  • 博客等级: 中校
  • 技术积分: 1942
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-19 17:52
文章分类

全部博文(135)

文章存档

2012年(29)

2011年(41)

2010年(26)

2009年(12)

2008年(9)

2007年(12)

2006年(6)

分类: Java

2011-03-09 13:42:35

  1. 在Servlet工程中,对通过classpath获取*.properties文件是常有的事,
  2. 但是他们究竟怎样个查找顺序,没太注意过,一直认为放到 /WEB-INF/classes/ 下即可,
  3. 但是如果自己要打一个jar包,并放到 /WEB-INF/lib/下,
  4. 如果jar包中包含配置文件, /WEB-INF/classes/下也包含,
  5. 代码是否会自动加载、按怎样的顺序加载?有点迷惑。

  6. 做了个小实验,然后google下文档,做个笔记先:

  7. 环境
  8.  J2SE 1.6
  9.  Tomcat6.0(安装在 E:/apache-tomcat-6.0.29)

  10. 工程结构:
  11. testServletCp
  12.  |- WEB-INF
  13.      |- classes
  14.      | | aa.txt
  15.      | |- me
  16.      | |- test
  17.      | AAA.class
  18.      | 1.txt
  19.      |- lib
  20.          |- me.jar
  21.              | aa.txt
  22.              |- me
  23.                  |- test
  24.                       Test.class
  25.                       1.txt

  26. ====== 使用ClassLoader加载资源

  27. AAA.class.getClassLoader() == Test.class.getClassLoader() == Thread.currentThread().getContextClassLoader()
  28.   = true

  29. -- 绝对路径
  30. AAA.class.ClassLoader.getResource("/"))
  31.   = file:/E:/apache-tomcat-6.0.29/webapps/testServletCp/WEB-INF/classes/

  32. AAA.class.ClassLoader.getResource("/aa.txt"))
  33.   = 如果 /WEB-INF/classes/aa.txt 存在,则为
  34.     file:/E:/apache-tomcat-6.0.29/webapps/testServletCp/WEB-INF/classes/aa.txt
  35.   = 否则为 null

  36. -- 相对路径
  37. AAA.class.ClassLoader.getResource("."))
  38.   = file:/E:/apache-tomcat-6.0.29/lib/

  39. AAA.class.ClassLoader.getResource("aa.txt"))
  40.   = 如果 /WEB-INF/classes/aa.txt 存在,则为
  41.     file:/E:/apache-tomcat-6.0.29/webapps/testServletCp/WEB-INF/classes/aa.txt
  42.   = 否则为
  43.     jar:file:/E:/apache-tomcat-6.0.29/webapps/testServletCp/WEB-INF/lib/me.jar!/aa.txt

  44. ====== 通过具体某个类加载

  45. Test.class.getResource("/"));
  46.   = file:/E:/apache-tomcat-6.0.29/webapps/testServletCp/WEB-INF/classes/

  47. Test.class.getResource("."));
  48.   = null

  49. Test.class.getResource("1.txt"));
  50.   = 如果 /WEB-INF/classes/me/test/1.txt 存在,则为
  51.     file:/E:/apache-tomcat-6.0.29/webapps/testServletCp/WEB-INF/classes/me/test/1.txt
  52.   = 否则为
  53.     jar:file:/E:/apache-tomcat-6.0.29/webapps/testServletCp/WEB-INF/lib/me.jar!/me/test/1.txt

  54. --------------------------------------------------------------------------------
  55. 参考:

  56. TOMCAT 6.X Class加载顺序
  57. http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html

  58.       Bootstrap
  59.           |
  60.        System
  61.           |
  62.        Common
  63.        / \
  64.   Webapp1 Webapp2 ...


  65. * Bootstrap classes of your JVM
  66. * System class loader classes (described above)
  67.     * $CATALINA_HOME/bin/bootstrap.jar
  68.     * $CATALINA_HOME/bin/tomcat-juli.jar
  69. * /WEB-INF/classes of your web application
  70. * /WEB-INF/lib
 
 
阅读(910) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~