3

在 Java Webapp 下,

我想将/WEB-INF/lib 设置为 D:/somepath/lib

/WEB-INF/classes到 E:/somepath/classes

web.xml到 F:/somepath/config.xml

如何在tomcat或jetty下配置这些来改变约定?

4

2 回答 2

1

规范(Java™ Servlet 规范版本 2.3)仅提及标准文件夹:

Web 应用程序类加载器必须首先从WEB-INF/classes 目录加载类,然后从WEB-INF/lib目录中的库 JAR 加载类。

使用 Tomcat 或 Jetty,您无法使用“开箱即用”提供的功能来做到这一点:

雄猫

WebappX — 为部署在单个 Tomcat 实例中的每个 Web 应用程序创建一个类加载器。Web 应用程序的/WEB-INF/classes目录中的所有解压类和资源,以及 Web 应用程序的/WEB-INF/lib目录下的 JAR 文件中的类和资源,对这个 Web 应用程序可见,但不给其他人。

码头

正常的配置是为每个 web 上下文(web 应用程序或 war 文件)提供它自己的类加载器,它具有系统类加载器作为它的父级。这样的类加载器层次结构在 Java 中是正常的,但是 servlet 规范通过要求:

包含在WEB-INF/libWEB-INF/classes中的类优先于父类加载器上的类。这与 java 2 类加载器的正常行为相反。

但是,您可以:

  1. 向 Jetty 添加额外的类路径
  2. 将目录添加到 Tomcat 类路径

干杯

于 2013-09-19T05:42:14.547 回答
0

在 Unix 系统上,您可以通过设置从预期位置到其他磁盘上的位置的软链接来手动执行此操作。

您提到的两个应用程序服务器都是开源的,因此您可以编写自己的版本。我想为 Web 应用程序实现类加载器的部分是您必须更改的部分。

但如果一定要搞这样的恶作剧,你应该怀疑自己之前做出了错误的决定。我想不出什么好理由去做你想做的事。

于 2013-09-19T07:12:28.807 回答