java web app装饰/包括问题

时间:2008-11-11 22:15:42

标签: java jsp java-ee stripes sitemesh

背景:在2002-2003天期间,我们有一个基于Java的旧CMS编写的系统。我们希望继续使用我们的新东西,使用tomcat,stripe和sitemesh。我们有导航,布局,“pods”,js,css等,我们已经从旧的CMS和一些新的应用程序中取出,因此我们拥有一致的外观和感觉。

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

到目前为止,我们提出的最好的方法是制作一个相当标准的sitemesh装饰器,它使用c:import来获取它所需要的东西,然后将其插入。这个解决方案有一些网络开销可能会使其陷入困境介绍一个失败点。我们查看了<%@ include file =“/ something.jsp”%>同样,但这似乎只是相关的背景。我们可以使用c:import并将其指向localhost,这似乎是迄今为止最好的解决方案。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

    我们使用JSF和Facelets非常成功地完成了这项工作。

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

    希望有所帮助

答案 1 :(得分:1)

我们已经使用了Sitemesh多年,我对此感到好奇。

我更喜欢编写标准的JSP标记文件(.tag或.tagx)来使用applydecorator。我认为applydecorator标签随着标签文件的出现而有效地废弃,但是太多的Sitemesh用户没有注意到。

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

对于真正装饰页面,JSP页面本身根本不对Sitemesh进行引用,我认为它在高级别上是有意义的,但我仍然不喜欢整个页面再次被解析。

第二个问题不是Sitemesh的错;鉴于它必须使用的Servlet API,我不知道它还能做些什么。但它确实让我想知道基于流的Servlet API的基于DOM的替代方案是否有价值。换句话说,不是让servlet将其输出写入流,而是将它们添加到树中呢?这将强制执行格式良好的输出,并使像Sitemesh这样的结构转换更便宜,或者将输出编码为不同的格式,如XHTML,HTML或JSON。