【问题标题】:How to change the Java webapp 'WEB-INF path' convention under tomcat or jetty如何在 tomcat 或 jetty 下更改 Java webapp 'WEB-INF path' 约定
【发布时间】:2013-08-28 11:52:37
【问题描述】:

在 Java Webapp 下,

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

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

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

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

【问题讨论】:

  • 我认为你不能这样做,因为它们都是 Java EE 规范。但需要对此的专家意见。
  • 您可以将目录添加到 tomcat 类路径(但影响所有 tomcat,而不仅仅是一个 webapp)。见stackoverflow.com/questions/1300780/…
  • 如果您的操作系统支持链接,并且如果您正在运行爆炸战争,您可以将这些目录设为符号链接。
  • @keith 是的,现在我正在使用可以在各种操作系统下创建“链接文件”的 eclipse,
  • 这不是“惯例”。这是一个规范。你为什么认为你需要一些不同的东西!

标签: java jakarta-ee tomcat jetty


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    Tomcat:

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

    Jetty:

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

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

    但是,您可以:

    1. Add extra classpaths to Jetty
    2. Add directory to Tomcat classpath

    干杯

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 2011-01-15
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多