1

背景:我们有一个系统是在 2002-2003 年期间用基于 Java 的旧 CMS 编写的。我们希望继续使用我们的新产品,使用 tomcat、stripes 和 sitemesh。我们有导航、布局、“pods”、js、css 等,我们已经从旧的 CMS 中取出这些内容,并融入了我们的一些新应用程序,因此我们具有一致的外观和感觉。

我们现在需要某种解决方案来摆脱所有的代码重复。我们的应用程序目前在同一个虚拟机上运行,​​但这可能会改变。我们需要一种方法让我们所有的 tomcat 实例访问一些公共元素(这些元素可能/可能不需要做一些服务器端的事情)。

到目前为止,我们想出的最好的方法是制作一个相当标准的 sitemesh 装饰器,它使用 c:import 来获取它需要的东西,并将其插入。这个解决方案有一些网络开销,可能会陷入困境并引入失败观点。我们也看过 <%@ include file="/something.jsp" %> ,但这似乎只是与上下文相关的。我们可以使用 c:import 并将其指向 localhost,这似乎是迄今为止最好的解决方案。

是否有其他模板/装饰框架(Tiles?)可以使这更简单?我们缺少什么?

4

2 回答 2

1

我不太确定你想在这里做什么。我的解释是:你有很多资源想要在多个应用程序中重用。您不希望在所有应用程序中都复制这些文件,因为这样会难以在应用程序之间保持一致性。

如果这是您的问题,我建议您将公共资源保存在 jar 文件中。这为您提供了几个优势:

  1. 您的资源是本地的 - 没有网络开销
  2. 您可以控制资源的更新。

nr 2 的示例:您将常用页面布局保存在 page-layouts-1.x.jar 中。您继续制作不影响使用它的应用程序的页面布局的次要版本 - 它们是直接替代品。有一天,您决定彻底重新设计您的应用程序并发布 page-layouts-2.0.jar。这需要对使用它的应用程序进行一些重写。现在,如果应用程序捆绑页面布局,而不是将它们保存在服务器上的共享类加载器中,那么迁移到 2.0 布局就不是全有或全无的事情。您可以一次迁移一个应用程序以使用 2.0 布局,而其他应用程序仍使用 1.x 布局。

我们使用 JSF 和 Facelets 非常成功地做到了这一点。

您可能想看看Weblets。我不知道 SiteMesh 或 Tiles 是否直接支持从类路径提供资源,但我假设您可以调整它们来做到这一点。

希望能帮助到你

于 2008-11-12T17:07:06.623 回答
1

我们已经使用 Sitemesh 多年了,我对它的感觉很复杂。

我更喜欢编写标准的 JSP 标记文件(.tag 或 .tagx)来使用 applydecorator。我认为随着标签文件的出现,applydecorator 标签实际上已经过时了,但是太多的 Sitemesh 用户没有注意到。

几乎我们所有的 Sitemesh 使用都是这种类型。我们有一些通用的页面模板,我们的 JSP 页面将明确地称为布局。“使用标准布局,这里是导航菜单,这里是页面正文。” 标记文件与此功能完全相同,但它们是标准化的,受任何 J2EE Web 工具的支持,并且内置于容器而不是其他依赖项中。

对于真正装饰一个页面,JSP 页面本身根本不引用 Sitemesh,我认为这在高层是有意义的,但我仍然不喜欢重新解析整个页面。

第二个问题真的不是 Sitemesh 的错。考虑到它必须使用的 Servlet API,我不知道它还能做什么。但这确实让我想知道基于 DOM 的替代基于流的 Servlet API 是否有价值。换句话说,与其让 servlet 将其输出写入流,不如将节点添加到树中会怎样?这将强制执行格式良好的输出,并使像 Sitemesh 那样进行结构转换或将输出编码为不同格式(如 XHTML、HTML 或 JSON)的成本更低。

于 2008-11-12T17:26:45.957 回答