`
yaolifei
  • 浏览: 23795 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

自定义ClassLoader在Tomcat中的问题

阅读更多
公司要求做加密,于是上网搜啊,都说加密重要的.class,自定义ClassLoader加载加密的class,其实我感觉也没有用,defineClass时还是要解密。但是其间遇到一个问题一直不知道什么原因:

Jdk1.6  Tomcat5.5
自定义的ClassLoader类:MyClassLoader
待解密的类:LicenseUtils
我用MyClassLoader加载LicenseUtils时的代码:

Class c = loadClass("xx.LicenseUtils"));
Method m = c.getDeclaredMethod("init", new Class[]{});
m.invoke(c.newInstance(), new Object[]{});

LicenseUtils类中init方法:

public void init() {
    System.out.println("init method");
}


这么写是没有问题的,但是如果我在init方法里面调用第三方类(不是系统的类),就会出现ClassNotFoundException,找了半天也不知道什么原因,而且仅仅是在Tomcat里面运行出错,在main方法里面做测试是木有问题的。

public void init() {
    //自定义的类 License
    com.test.encrypt.License lic = new com.test.encrypt.License();
    //如果是第三方的jar包也报错
    System.out.println("init method");
}



我思忖,Java Application 和 Web Application有什么区别呢?
Jdk有三个ClassLoader,利用委派方式加载类,Tomcat定制了自己一系列的ClassLoader来加载类,我自己写
的MyClassLoader继承自Jdk的ClassLoader,Tomcat的WebAppClassLoader继承自URLClassLoader,URLClassLoader又继承自ClassLoader。

查了Apache的Mailing Lists发现有人说Tomcat只能用继承自WebAppClassLoader的ClassLoader

有人遇到过吗?或者看出有什么问题的
分享到:
评论
1 楼 wupuyuan 2011-09-27  
没有尝试过自己的ClassLoad。不过我用过jks,如果不是要加密class,可以用它看看。

相关推荐

    3-7Tomcat中自定义类加载器的使用与源码实现(1).mp4

    3-7Tomcat中自定义类加载器的使用与源码实现(1).mp4

    tomcat 类加载机制 —— ClassLoader

    在Tomcat中,我们可以通过配置`catalina.properties`文件和`server.xml`文件来调整类加载策略,例如设置自定义的类加载顺序或启用共享类加载器。 此外,Tomcat还支持热部署,即在不重启服务器的情况下更新Web应用的...

    Tomcat 5.0.18 ClassLoader source code insight

    在Tomcat中,ClassLoader的实现则更加复杂,因为它需要处理Web应用的类加载问题,确保不同应用之间的类隔离,同时支持热部署和动态更新。 Tomcat的ClassLoader体系主要由以下几部分组成: 1. Bootstrap ...

    tomcat类加载器

    4. Common ClassLoader:在Tomcat中,它是所有Web应用共享的类加载器,用于加载`common.loader`配置项指定的类路径。 5. WebApp ClassLoader:每个Web应用有自己的类加载器,它加载应用的`WEB-INF/classes`和`WEB-...

    java类加载器-tomcat中的类加载器

    类加载的委托模型在Tomcat中也得到了体现。每个类加载器在尝试加载类时,会先委托给父类加载器,只有当父类加载器无法加载时,才会尝试自己加载。这种机制保证了Java的核心类库只被加载一次,同时也确保了类的唯一性...

    Tomcat:apache-tomcat-6.0.18

    5. **ClassLoader机制**:Tomcat使用自定义的ClassLoader来加载Web应用程序的类,确保不同应用之间的类隔离,防止冲突。 Tomcat 6.0.18版的特性包括: 1. **性能优化**:相对于之前的版本,6.0.18进行了性能调优,...

    《深入剖析 Tomcat》PDF版本下载.txt

    在Tomcat中,Container分为四个层次:Engine、Host、Context和Wrapper。 - Engine:代表整个服务器。 - Host:对应虚拟主机概念,可以配置多个Host来实现多个域名共享同一台物理服务器。 - Context:每个Web应用...

    apache-tomcat-7.0.40-src

    4. **Jasper组件**:Jasper是Tomcat中的JSP编译器,负责将JSP页面转换为Java Servlet。通过源码,你可以了解JSP解析、编译和执行的整个过程。 5. **ClassLoader机制**:Tomcat的类加载机制允许每个Web应用有自己的...

    tomcat-8.0.50.zip

    4. **Context**:在Tomcat中,每个Web应用程序对应一个Context,它定义了一个Web应用程序的范围,包括应用程序的根目录和部署描述符(web.xml)。 5. **ClassLoader**:Tomcat使用自定义的ClassLoader来加载Web应用...

    tomcat6工具

    5. ClassLoader机制:理解Classpath的加载顺序和自定义ClassLoader的使用,能有效解决类冲突问题。 四、Tomcat6性能调优 1. 线程池设置:调整最大线程数和最小线程数,避免资源浪费和线程阻塞。 2. JVM内存配置:...

    关于java热部署知识.doc

    例如,在Tomcat中,当WEB-INF/classes或WEB-INF/lib目录下的文件发生变化时,Tomcat会自动检测并重新加载这些变化。对于EJB,一些服务器允许开发者通过自定义ClassLoader或使用特定的部署配置实现热部署。 此外,...

    Classloader

    在Java编程语言中,`Classloader`(类加载器)是一个至关重要的概念,它负责将类的`.class`文件从文件系统或网络中加载到Java虚拟机(JVM)中,使得程序能够运行。理解`Classloader`的工作原理对于深入学习Java、...

    深入剖析Tomcat 随书 源码

    例如, valves(阀门)组件允许我们在请求处理链中插入自定义逻辑,实现日志记录、URL重写等功能。JMX(Java Management Extensions)接口则提供了监控和管理Tomcat的能力。 总的来说,《深入剖析Tomcat源码》这...

    Tomcat源代码学习研究

    - **Classloading**:Tomcat使用定制的ClassLoader加载Web应用的类,遵循“父类加载优先”原则。 6. **连接器与协议处理** - **NIO和Apr**:Tomcat提供了多种连接器实现,如基于Java NIO的 Coyote Connector 和...

    apache-tomcat-7.0.81-src 源码免费下载

    9. **错误处理与日志系统**:Tomcat使用自定义的日志框架,源码中`logging`目录下的类定义了如何记录和处理错误信息。 10. **网络编程**:Tomcat底层使用NIO(非阻塞I/O)和BIO(阻塞I/O)模型,这在`java/org/...

    细说Tomcat如何打破双亲委派(有源码和图)

    然而,在Web应用服务器如Tomcat中,这种模型有时并不适用。因为每个Web应用可能有自己的类库,如果都由同一个类加载器加载,可能会引发不同应用间的类冲突。为了解决这个问题,Tomcat引入了自定义的类加载策略。 ...

    tomcat_src

    5. Session复制与粘滞会话:在集群环境中,Tomcat提供了session复制和粘滞会话策略,以处理分布式环境下的会话问题。 6. ClassLoader:Tomcat有自己的类加载机制,允许不同Web应用程序隔离运行,并支持热部署。 ...

Global site tag (gtag.js) - Google Analytics