weblogic to tomcat
1 getResourceAsStream() path issueec.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
http://farm3.static.flickr.com/2682/4379354938_dc7cd5f47e_o.png
默认情况,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的范围之内加载。
页:
[1]