【问题标题】:Running multiple sites from one web application in Java在 Java 中从一个 Web 应用程序运行多个站点
【发布时间】:2009-10-02 10:14:06
【问题描述】:

我在考虑drupal 多站点行,每个站点都应该有它的文件夹,其中包含主题、插件和各种静态文件。事实证明,用 Java 做起来并不容易:类必须在一个地方,标记文件在另一个地方,静态文件在第三个地方,只有 jsp 文件可以去任何地方。类和标签可以打包在 jar 中,但是如何从 jar 中提供静态文件和 jsps?做这种事情的最佳方法是什么?

上一个稍微相关的问题:Jsp tags outside WEB-INF/tags

【问题讨论】:

    标签: java jakarta-ee


    【解决方案1】:

    默认情况下,在大多数 servlet 容器中,静态文件从 WEB-INF 以外的任何地方提供,与 JSP 相同(除了不解释)。

    您可以通过编写一个小 servlet 将静态文件作为资源加载(例如使用 Class.loadResourceAsStream())并将它们写到 ServletOutputStream 上,从而从 jar 中提供静态文件。

    我不知道drupal,但听起来Java中的等价物是Web应用程序,可以捆绑为WAR存档(http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WebComponents3.html

    【讨论】:

    • 这就是重点,在 Drupal 中,您有一个应用程序,其中包含大量通用代码,并且站点具有不同的数据、不同的外观、各处的插件,但它们共享很多。 WAR 文件是整个应用程序。
    • 好的——我想我明白你的意思了。您可以将您的 jar 加载到 servlet 容器类加载器中,然后它应该在 webapp 中可用,但是机制和您的里程将因 servlet 容器而异。总的来说,您可能正在寻找(或开发)一个框架(Tapestry、struts 等)来提供您所追求的。
    【解决方案2】:

    不太了解您的问题。我从同一个 webapp 运行多站点,打包为一个单一的战争。

    我的WAR组织如下,

    myapp/WEB-INF
    myapp/common
    myapp/site1
    myapp/site2
    

    所有类、TLD 都是共享的,但 2 个站点具有完全不同的品牌、主题等。站点特定文件位于它们自己的目录中。他们共享许多静态文件,例如 javascript 和图像。这些文件存储在 common 下,可以使用每个站点的相对 URL 进行引用,例如,

      ../common/images/cart.jpg
    

    整个事情作为单个 WAR 交付并作为单个应用程序运行。该网站位于

    http://example.com/myapp/site1

    我们还有一个带有 mod_rewrite 的 Apache 前端,并且这些网站也可以作为,

      http://site1.example.com
      http://site2.example.com
    

    【讨论】:

    • 站点之间不允许有细微的差异,因此站点必须具有完全相同的功能,而不是大部分相同。基本上这就是我们要做的,如果网站足够不同,我们会将它放在另一个应用程序中,这显然没什么大不了的。
    猜你喜欢
    • 2017-03-20
    • 2018-07-22
    • 2012-11-09
    • 1970-01-01
    • 2014-11-10
    • 2013-04-08
    • 1970-01-01
    • 2021-04-05
    • 2017-02-10
    相关资源
    最近更新 更多