代码之家  ›  专栏  ›  技术社区  ›  David Rabinowitz

放置DTD和模式文件的位置

  •  4
  • David Rabinowitz  · 技术社区  · 16 年前

    我有一个相当典型的JavaEE应用程序,由EJB3、Seam组件、SpringBeans和JSF组成,所有这些应用程序都打包到EAR文件中的几个JAR和WAR文件中。当然,对于Javaee,我们有许多XML文件作为应用程序的一部分。其中一些XML文件使用DTD(Seam)进行验证,另一些使用模式进行验证。

    作为从示例和其他项目中获取的大多数文件,所有DTD和模式都指向项目的站点,默认DTD或模式位于该站点中。问题来了:出于某种原因,JBoss站点今天错过了SeamDTD(检查 http://www.jboss.com/products/seam/components-1.1.dtd , http://www.jboss.com/products/seam/components-1.2.dtd , http://www.jboss.com/products/seam/components-2.0.dtd )因为jboss服务器使用这个位置在引导程序上验证XML,所以应用程序部署失败。

    我的问题是:在这种情况下,我应该把DTD和定义文件放在哪里?我看到三个选项:

    1. 使用默认位置,如我之前所做的。因为这意味着我现在将JBoss、Sun、Spring和任何其他供应商的稳定性添加到我的系统中,以防我需要重新部署应用程序,所以我不希望这样做。
    2. 将所有DTD和模式文件复制到我的服务器,让URL指向我控制的服务器。
    3. 将所有DTD和架构文件复制到我的应用程序或应用服务器,并在本地使用它们。

    我倾向于使用选项3,因为它提供对文件的完全控制,没有网络依赖性。在我们所做的测试中,它甚至显著地缩短了服务器的引导时间——很明显,XML解析器不缓存定义。走这条路我有没有错过什么?

    2 回复  |  直到 16 年前
        1
  •  0
  •   MahdeTo Ben ODay    16 年前

    不,这是正确的做法。第一种方法只能用于混乱或玩弄代码,但不能用于任何严重的事情,第二种方法与第三种方法相比没有优势,同时也更复杂。

        2
  •  0
  •   J-16 SDiZ    16 年前

    真正的问题是:你 真的? 需要验证XML文件吗? 在大多数情况下,验证不是在生产代码中完成的——大多数情况下验证速度太慢。

    如果您真的想验证,请选择选项3。

    推荐文章