我查了下官方的说明,倒是很简单
可是按其说明配置后,系统总是报错我的myapp.xml配置如下:<?xml version='1.0' encoding='utf-8'?>
<Context docBase="Chat" path="/Chat" reloadable="true" workDir="work\Catalina\localhost\Chat">
<Loader className="ht.util.MyClassLoader" reloadable="true" delegate="false"/>
</Context>启动后报错:
java.lang.IllegalArgumentException: argument type mismatch
        at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.
java:2726)
        at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.
java:2752)
        at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:106
1)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endEleme
nt(AbstractSAXParser.java:633)
        at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.
emptyElement(AbstractXMLDocumentParser.java:221)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanStartElement(XMLDocumentFragmentScannerImpl.java:872)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
ML11Configuration.java:834)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
ML11Configuration.java:764)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.
java:148)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Ab
stractSAXParser.java:1242)
        at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)
        at org.apache.catalina.startup.ContextConfig.processContextConfig(Contex
tConfig.java:782)
        at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig
.java:722)
        at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:987
)
        at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfi
g.java:279)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:120)
        at org.apache.catalina.core.StandardContext.init(StandardContext.java:50
71)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:3
984)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:760)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:74
0)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.ja
va:626)
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.j
ava:553)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488
)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:311)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:120)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)        at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443
)
        at org.apache.catalina.core.StandardService.start(StandardService.java:4
48)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:700
)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
2007-12-21 9:57:43 org.apache.catalina.startup.ContextConfig processContextConfi
g
严重: Occurred at line 4 column 52
2007-12-21 9:57:43 org.apache.catalina.startup.ContextConfig start
严重: Marking this application unavailable due to previous error(s)
2007-12-21 9:57:43 org.apache.catalina.core.StandardContext start
严重: Error getConfigured
2007-12-21 9:57:43 org.apache.catalina.core.StandardContext start
严重: Context [/chat] startup failed due to previous errors
2007-12-21 9:57:46 org.apache.coyote.http11.Http11BaseProtocol start
信息: Starting Coyote HTTP/1.1 on http-8088
2007-12-21 9:57:56 org.apache.jk.common.ChannelSocket init

解决方案 »

  1.   

    你必须使用自定义的ClassLoader吗?一般没有必要如果要,你的配置也是错误的,Loader段要求的不是ClassLoader,而是org.apache.catalina.Loader你可以下载Tomcat的代码,找到WebappLoader看看里面的实现,其中有getClassLoader方法在这个方法中你再返回自已的ClassLoader
      

  2.   

    嗯,同意楼上的看法.一般不要做这样的热部署,有可能会带来很多不便的.我也是觉得你的Loader类型是不对的,参照楼上说的再试试吧!!祝你好运哦...
      

  3.   

    不是没有必要去classload!
    而是要深入的了解classload再去自己加载类吧它的原理大致是这样:1 调用 findLoadedClass 来查看是否存在已装入的类。 
    2 如果没有,那么采用那种特殊的神奇方式来获取原始字节。 
    3 如果已有原始字节,调用defineClass将它们转换成Class对象。 
    4 如果没有原始字节,然后调用findSystemClass查看是否从本地文件系统获取类。 
    5 如果resolve参数是true,那么调用resolveClass解析Class对象。 
    6 如果还没有类,返回ClassNotFoundException。 
    7 否则,将类返回给调用程序。 
     
    配置小意思 建议先花时间去理解classload的原理
      

  4.   

    因为我想加密JAVA源码来着,将java class文件加密后,用自己的classloader来加载。
    现在手工加载测试是没有问题,就是配置不上去,呵呵。
    看来无人知道了,今晚结贴。