weblogic to tomcat

本文介绍Java中从jar包读取配置文件的方法,并探讨了不同应用服务器(如Tomcat与WebLogic)中类加载器的工作原理及配置差异。文章还讨论了字符集设置对数据库连接的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 getResourceAsStream() path issue

ec.jar was put on /WEB-INF/lib
ec.jar structure:
-com/abc/classA
-conf/config.properties

or
put them on /WEB-INF/classes

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ReadPropFromJar {

private static String path="/conf/config2.properties";
private static Properties p=new Properties();
public ReadPropFromJar(){
InputStream in=ReadProperties.class.getResourceAsStream(path);
try{
p.load(in);
//p.getProperty(key);
}catch(IOException ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
ReadPropFromJar rp=new ReadPropFromJar();
System.out.println(rp.getKey("db.user"));

}

public String getKey(String key){
return p.getProperty(key);
}
}

如果path"/"开头,表示以classpath为准(classes,lib)
如果path"conf/config.properties",表示这个文件在class对象的相对目录里


2 charset issue:
tomcat default use iso-8859-1 as URIEncoding
url="jdbc:mysql://localhost/app?useUnicode=true&characterEncoding=utf-8"

3 classloader conflict
[img]http://farm3.static.flickr.com/2682/4379354938_dc7cd5f47e_o.png[/img]
默认情况,weblogic按委托机制加载类,效果就是越上层的classloader优先级越高,一个class如果在上层classloader能加载到,就不会让下面的classloader加载。

Tomcat默认先从webappclassloader载入class,如果失败则请求父ClassLoader的代理
这样可以让不同的WEB APP之间的类载入互不干扰.


weblogic也有webappClassloader, 但是需要配置才生效
在weblogic.xml中配置<prefer-web-inf-classes>,可以让web application classloader优先在自己war范围内加载类,找不到的类才会请求上层classloader

weblogic还有个Filtering loader比较有意思。Filtering classloader是个特殊的classloader,它并不会加载任何类,而是起到控制类加载优先级的作用。在weblogic-application.xml中配置<prefer-application-packages>,可以限制对于指定的类不再向上层classloader请求,也就是限制在EAR的范围之内加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值