Java tomcat如何定位不属于app libs中任何jar的类

Java tomcat如何定位不属于app libs中任何jar的类,java,applet,Java,Applet,在我们的应用程序(applet)中,如果找到所需的jar之一,我希望启用导出功能。我不想添加这个jar小程序引用以避免下载大小 我正在将Class.forName与其中一个classed一起使用,以检查特定的是否可用。在local machine Class.forName中,调用ret运行一个实例,尽管jar不在任何类路径中 有人能解释tomcat类发现机制吗。根据您对小程序的描述,我看不到任何选项,只有在小程序在客户端运行时将jar文件包含在小程序标记中 您可以为jar文件设置HTTP缓存头

在我们的应用程序(applet)中,如果找到所需的jar之一,我希望启用导出功能。我不想添加这个jar小程序引用以避免下载大小

我正在将Class.forName与其中一个classed一起使用,以检查特定的是否可用。在local machine Class.forName中,调用ret运行一个实例,尽管jar不在任何类路径中


有人能解释tomcat类发现机制吗。

根据您对小程序的描述,我看不到任何选项,只有在小程序在客户端运行时将jar文件包含在小程序标记中

您可以为jar文件设置HTTP缓存头,以允许客户端浏览器缓存它们,因此,您只需支付一次下载费用

对于经常更改的jar文件,请在jar文件名中包含一个版本号,以避免相同名称但内容不同的jar出现客户端缓存问题

编辑:尽管问题是关于tomcat发现罐子的方式,但我认为问题的根源在其他地方

在服务器端的Tomcat 6中,Tomcat在$Tomcat_HOME/lib和WEB-INF/lib目录中搜索jar文件。如果在那里添加或删除文件,通常需要重新启动整个Tomcat实例

Edit2:


您查找jar文件的经验可能是因为您从webapp所在的同一目录运行HTML页面,或者jar文件位于公共位置或公共类路径位置(例如在JRE/lib/ext目录中)。

我很难理解您的问题。如果满足特定的运行时条件,是否尝试将类下载到小程序中?从6u10开始,我相信您可以使用动态下载扩展。回到1.2版,您可以使用
URLCLassLoader.newInstance
,尽管这在缓存端并不太好。

小程序运行在客户端(用户浏览器内部),而不是在Tomcat web服务器上,因此这与Tomcat无关

您需要研究小程序类加载器是如何工作的

通常,他们会尝试从web服务器下载类,下载的Url与获取小程序的Url相同。因此,如果小程序处于
并且需要foo.bar.MyClass类,如果在本地找不到它,它将尝试下载。

这个问题不是很清楚。Tomcat和Applet在类加载方面完全不同。小程序有一个安全管理器,可以防止某些事情,例如加载任意类。他们必须从web服务器下载这些类。web服务器不必是tomcat甚至Java;小程序文件只是通过普通HTTP提供的文件

至于雄猫。特别是,Tomcat使用类加载器的继承权来查找类。有几个众所周知的自动加载jar的位置,例如
$CATALINA_HOME/lib
$CATALINA_HOME/shared/lib
。它还加载web应用程序自己的JAR和类。类装入器的工作方式如下:

  • 引导类加载器在核心Java类文件夹中查找
  • 系统类加载器在$CATALINA_HOME/bin/bootstrap.jar中查找
  • $CATALINA_HOME/bin/tomcat-juli.jar
  • WebAppX类加载器先查看WEB-INF/classes,然后再查看WEB-INF/lib
  • 公共类加载器在$CATALINA_HOME/lib文件夹中查找
  • 如果在conf/CATALINA.properties文件中设置了shared.loader属性,则共享类加载器将在$CATALINA_HOME/shared/classes和$CATALINA_HOME/shared/lib中查找

  • 原因:前面引用的其他库(JAR)中有一个具有我要查找的类

    谢谢你的回答;我的问题是“tomcat如何在我的本地机器上定位类”,尽管它是app/lib的一部分,并且在applet参考中提到过。是的,我也不能完全理解这个问题。