- 浏览: 198846 次
- 性别:
- 来自: 本溪
文章分类
最新评论
-
shouchun_w:
写的非常翔实!辛苦了!我在按照你的“扩展抓屏函数”(命令完全一 ...
Selenium循环测试,使用变量,抓屏 -
chenhailong:
わかる、ありがど
【转载】ようだ、みたいだの比較 -
mahengyang:
为什么用tomcat启动web工程时需要将用到的jar包都放在 ...
(tomcat中级)应用Tomcat的WebappClassLoader加载指定目录的jar文件 -
柏新星:
柏新星 写道create table Person (id i ...
derby+myBatis 入门 -
柏新星:
create table Person (id int pri ...
derby+myBatis 入门
要点
- 用WebappClassLoader::addRepository就可以实现。不用扩展WebappClassLoader类。
- 当ServletContextListener::contextInitialized时,调用addRepository。
- 在各个context-param中指定jar所在路径。
ServletContextListener
package cn.net.tianyu.classloader.servlet; import java.io.File; import java.io.FilenameFilter; import java.net.MalformedURLException; import java.util.StringTokenizer; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.catalina.loader.WebappClassLoader; public class ClassLoadListener implements ServletContextListener { private static final String CONTEXT_PARAM_NAME_EXTLIBPATH = "net.tianyu.servlet.extlibs"; @Override public void contextInitialized(ServletContextEvent event) { ServletContext context = event.getServletContext(); addJar(context); } @Override public void contextDestroyed(ServletContextEvent event) { } synchronized private void addJar(ServletContext context) { String extlibs = context.getInitParameter(CONTEXT_PARAM_NAME_EXTLIBPATH); if (extlibs == null || extlibs.length() == 0) return; WebappClassLoader loader = (WebappClassLoader) getClass().getClassLoader(); StringTokenizer st = new StringTokenizer(extlibs, ","); while (st.hasMoreTokens()) { String jarPath = st.nextToken(); String jarRealPath = context.getRealPath(jarPath); File jarDir = new File(jarRealPath); if (!jarDir.isDirectory()) continue; File[] jarFiles = jarDir.listFiles(new JarFileNameFilter()); for (File jarFile : jarFiles) { try { loader.addRepository(jarFile.toURI().toURL().toString()); } catch (MalformedURLException e) { } } } } class JarFileNameFilter implements FilenameFilter { public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".jar"); } } }
web.xml
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <context-param> <param-name>net.tianyu.servlet.extlibs</param-name> <param-value>/../../extlib,/../../otherlib</param-value> </context-param> <listener> <listener-class>cn.net.tianyu.classloader.servlet.ClassLoadListener</listener-class> </listener> <servlet> <servlet-name>sample</servlet-name> <servlet-class>cn.net.tianyu.classloader.servlet.SampleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>sample</servlet-name> <url-pattern>/sample</url-pattern> </servlet-mapping> </web-app>
评论
4 楼
mahengyang
2011-09-16
为什么用tomcat启动web工程时需要将用到的jar包都放在WEB-INF/lib目录下呢?我在工程里的BuildPath里也设置了需要的jar包的路径,但是程序运行后还是会报出CLASSNOTFOUNDEXCEPTION,当我把所有的jar包都放到WEB-INF/lib下面后就好了。
3 楼
stevendu
2009-09-10
问题找到了,我应该在部署后的lib中删除catalina.jar
2 楼
stevendu
2009-09-09
难道是我的jar包用错了? 我用的catalina.jar啊。
1 楼
stevendu
2009-09-09
执行到 WebappClassLoader loader = (WebappClassLoader) getClass().getClassLoader(); 时报错!
严重: Exception sending context initialized event to listener instance of class com.zoove.dcp.jars.JarLoaderListener
java.lang.ClassCastException: org.apache.catalina.loader.WebappClassLoader cannot be cast to org.apache.catalina.loader.WebappClassLoader
at com.zoove.dcp.jars.JarLoaderListener.addJar(JarLoaderListener.java:35)
at com.zoove.dcp.jars.JarLoaderListener.contextInitialized(JarLoaderListener.java:25)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:924)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:887)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1147)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009-9-9 23:41:47 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2009-9-9 23:41:47 org.apache.catalina.core.StandardContext start
严重: Context [/dcp] startup failed due to previous errors
严重: Exception sending context initialized event to listener instance of class com.zoove.dcp.jars.JarLoaderListener
java.lang.ClassCastException: org.apache.catalina.loader.WebappClassLoader cannot be cast to org.apache.catalina.loader.WebappClassLoader
at com.zoove.dcp.jars.JarLoaderListener.addJar(JarLoaderListener.java:35)
at com.zoove.dcp.jars.JarLoaderListener.contextInitialized(JarLoaderListener.java:25)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:924)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:887)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1147)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009-9-9 23:41:47 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2009-9-9 23:41:47 org.apache.catalina.core.StandardContext start
严重: Context [/dcp] startup failed due to previous errors
发表评论
-
WCF & WSDL
2014-07-16 09:25 636http://www.atmarkit. ... -
设定PNG的bKGD
2012-06-01 17:20 1094一,参考资料 PNG结构说明 http://home ... -
扩展ExtJS的【Ext.data.reader.Json】例子
2012-03-07 19:35 1961一,下面是扩展Class Ext.define('Dn ... -
Java合并PNG图像(保持背景透明)
2012-01-21 10:43 8221import java.awt.Graphics2D; im ... -
htmlcompressor介绍
2011-09-05 16:01 4255官网 : http://code.google.com/p/h ... -
(java入门)Velocity最简单例程
2011-08-26 06:51 1895一,前言 在编程中总会用到 “文本模板”+“数据” 来生 ... -
找出Web程序依赖的所有的JAR(中文)
2011-06-23 20:02 1072一,前言 开发Web应用程序时总会在lib目录下放很多J ... -
(java入门)创建SSL连接
2011-06-09 16:21 1602纯粹备忘录。 用Windows系统的证明书STORE ... -
Google的Mail地址簿的API的应用
2011-05-25 23:22 4354#前言 我用Gmail觉得地址簿操作不方便。幸好Goog ... -
gclog的分析方法
2011-04-21 19:17 1366一,概要 通过GC的LOG也能为判断内存泄漏提供些相关信 ... -
找出Web程序依赖的所有的JAR
2011-04-13 10:51 964■問題 WebAppを開発する際、Spring、Strut ... -
JConsole连接远程JVM的设定
2011-03-24 10:38 649■検測されたJVMのパラメータは、下記である。 -Dcom. ... -
derby+myBatis 入门
2010-10-15 13:00 38581, 下载derby, myBatis。 2, 设定DERB ... -
(java入门)用apache.poj读写Excel文件的例子(2)
2010-09-03 15:39 1228Excelファイル比較サンプル package net.ti ... -
(java入门)用apache.poj读写Excel文件的例子(1)
2010-06-08 16:17 1653本例用到以下Class,完成对Excel的基本读写。我用的Ex ... -
Cobertura 笔记
2010-05-07 13:56 14021,从 http://cobertura.sourceforg ... -
(Struts2)OGNL笔记 # 的用法三
2010-03-30 20:37 899在行选择等计算中,用 #this 代表迭代中的当前对象 Ac ... -
(Struts2)OGNL笔记 # 的用法二
2010-03-30 20:11 810可以作成一个Map JSP <s:s ... -
(Struts2)OGNL笔记 # 的用法一
2010-03-30 19:49 773可以用#访问 Request, Session, Applic ... -
(java入门) MyLog
2009-09-07 23:47 1013package net.dncsoft.test; ...
相关推荐
4. **使用WebAppClassLoader**:针对特定应用的JAR,应放在Web应用的`WEB-INF/lib`下,由WebAppClassLoader加载。 **三、配置文件详解** 1. **server.xml**:这是Tomcat的主要配置文件,包含了Server、Service、...
7. **使用隔离的类加载器**:通过设置不同的类加载策略,例如Web应用的`WebappClassLoader`,可以避免不同应用之间的jar冲突。 8. **社区支持**:在Apache Tomcat的官方论坛或Stack Overflow等技术社区提问,获取...
4. WebApp ClassLoader:每个Web应用都有自己的ClassLoader,它负责加载应用的WEB-INF/classes和WEB-INF/lib下的类。 在Tomcat 5.0.18的源码中,我们可以看到这些ClassLoader是如何协同工作的。例如,`org.apache....
Tomcat's WebappClassLoader is currently not instrumentable, so Spring provides a custom ClassLoader that can be used by placing spring-instrument-tomcat.jar in $TOMCAT_HOME/lib and putting a loader ...
- WebappX类加载器:每个Web应用都有一个对应的WebappX类加载器,父加载器是Shared,主要负责加载应用的/WEB-INF/classes目录下的class和/WEB-INF/lib目录中的jar包。 - JasperLoader:用于加载JSP编译后的class文件...
4. **使用类加载器策略**:在某些情况下,应用服务器的类加载策略可能会影响从特定目录加载JAR文件。例如,Tomcat有WebAppClassLoader,它按照一定的顺序加载类。理解并调整服务器的类加载策略可能能解决问题。 5. ...
在Web应用中,`WebappClassLoader`是一个关键的类加载器,它是Tomcat等应用服务器专门为每个Web应用实例实现的。`WebappClassLoader.class`是这个类加载器的主类,它负责加载Web应用上下文中的所有类和资源。`...
`bin`目录包含了启动和停止Tomcat的脚本,`conf`包含配置文件,如`server.xml`和`context.xml`,`lib`存放必要的JAR库,`webapps`是部署Web应用的地方,而`work`则存储了Servlet编译后的类文件和临时文件。...
- 默认的类加载器,负责加载应用 classpath 中的类。 #### 五、双亲委派模型 双亲委派模型是 Java 类加载器的核心设计原则之一,它的目的是为了保证类的唯一性以及提高安全性。具体工作流程如下: 1. 如果一个类...
4. webapps.webappClassLoader(加载WEB-INF下的JAR) 因此,在JavaWeb项目中,需要将JAR包导入到WEB-INF下的lib文件夹中,以便服务器可以加载JAR包。如果将JAR包导入到User Library中,那么服务器将无法加载JAR包...
当一个Servlet被打包成.Jar文件放入JRE的lib/ext目录下,由ExtClassLoader加载时,会引发错误。这是因为在Java的双亲委派模型中,加载请求会从顶级类加载器(ExtClassLoader)向下传递,如果父类加载器找不到,子类...
- **WebAppClassLoader**:为每个Web应用提供独立的类加载器,确保应用之间的隔离。 - **ParentLoader**:继承自BaseLoader,用于加载公共类库。 通过这种设计,Jetty实现了良好的类加载器层次结构,既保证了应用的...
1、ehcache.xml和ehcache.xsd两个文件可以在下在下载下来的名为“ehcache-core-x.x.x-distribution.tar.gz”压缩文件中找到 2、由于要实现Ehcache缓存页面,所以必须要添加“ehcache-web-2.0.4.jar” jar包,该jar包...