Frage

Hintergrund: Wir haben ein System, das in einem älteren CMS basierend auf Java zurück in den 2002-2003 Tagen geschrieben wurde. Wir wollen uns darauf, mit unseren neuen Sachen in Bewegung bleiben, mit tomcat, Streifen und sitemesh. Wir haben Navigation, Layout, "Pods", js, css, etc, dass wir aus dem alten CMS und in ein paar unsere neuen Apps genommen haben, so dass wir konsequent Look and Feel.

Wir brauchen jetzt eine Art von Lösung aller Code-Duplizierung los loszuwerden. Unsere Anwendungen im Moment auf dem gleichen VM laufen, aber das ändern könnte. Wir müssen einen Weg für alle unsere tomcat Instanzen einige gemeinsame Elemente zuzugreifen (und diese Elemente können / dürfen nicht brauchen eine Server-Seite Sachen zu tun).

Das Beste, was wir mit so weit habe kommen ist ein ziemlich Standard sitemesh Dekorateur machen, dass verwendet c:. Import zu bekommen, was er braucht, und steckt es rechts in diese Lösung einige Netzwerk-Overhead hat, die es könnte versinken und einführen einen Punkt scheitern. Wir haben in <% @ include file = „/ something.jsp“%> sieht auch, aber das scheint nur Kontext relativ zu sein. Import und es auf localhost verweisen, die die beste Lösung so weit zu sein scheint: Wir könnten c verwenden.

Gibt es andere Templat / Einrichtungs- Rahmen gibt (Fliesen?), Der könnte diese einfacher machen? Was fehlt uns?

War es hilfreich?

Lösung

Ich bin mir nicht ganz sicher, was Sie versuchen, hier zu tun. Meine Interpretation ist dies: Sie haben eine Reihe von Ressourcen, die Sie in einer Reihe von Anwendungen wiederverwendet werden sollen. Sie wollen nicht, diese Dateien in allen Anwendungen dupliziert haben, wie sie es schwer, die Konsistenz zwischen den Anwendungen zu pflegen machen würden.

Wenn Ihre Frage ist, würde ich vorschlagen, dass Sie Ihre gemeinsamen Ressourcen in JAR-Dateien zu halten. Dies gibt Ihnen mehrere Vorteile:

  1. Ihre Ressourcen sind lokal - kein Netzwerk-Overhead
  2. Sie haben die Kontrolle über Updates zu den Ressourcen.

Ein Beispiel für nr 2: Sie behalten Ihre gemeinsamen Seitenlayouts in Seitenlayouts-1.x.jar. Sie halten auf geringfügige Versionen der Seiten-Layouts, die nicht die Anwendungen, es wirkt sich mit - sie Drop-in-Ersatz sind. Ein Tag, entscheiden Sie Ihre Anwendungen komplett neu zu gestalten und Release-Seite-Layouts-2.0.jar. Dies erfordert einige Neufassungen zu den Anwendungen es verwenden. Nun, wenn die Apps die Seitenlayouts bündeln, im Gegensatz sie in einem gemeinsamen Class Loader auf dem Server zu halten, auf das 2.0 Layout der Migration ist nicht alles oder nichts Angelegenheit. Sie können eine App auf einmal migrieren 2.0 Layout zu verwenden, während die andere noch das 1.x-Layout verwenden.

Wir tun dies sehr erfolgreich, mit JSF und Facelets.

Sie können einen Blick auf Weblets haben wollen. Ich habe keine Ahnung, ob SiteMesh oder Fliesen bekamen keine direkte Unterstützung für die Mittel aus dem Klassenpfad dienen, aber ich nehme an, Sie können sie zwicken, dies zu tun.

Hoffe, es hilft

Andere Tipps

Wir haben Sitemesh seit Jahren und ich habe gemischte Gefühle.

Ich ziehe es weit Standard JSP-Tag-Dateien (.tag oder .tagx) Schreiben von applydecorator zu verwenden. Ich denke, die applydecorator Tag effektiv mit dem Aufkommen von Tag-Dateien veraltet, aber zu viele Sitemesh Benutzer gar nicht bemerkt.

Fast alle unsere Sitemesh Nutzung war dieser Art. Wir würden ein paar gemeinsame Seitenvorlagen haben, dass unsere JSP-Seiten explizit als Layout beziehen würde. „Verwenden Sie das Standard-Layout, ist hier das Navigationsmenü und hier ist der Körper von der Seite.“ Tag-Dateien sind eine exakte Kopie dieser Funktionalität, aber sie sind standardisiert, von jedem J2EE Web-Tool unterstützt und eingebaut, um den Behälter eher als eine andere Abhängigkeit.

Für wirklich eine Seite Dekoration, wo die JSP-Seite selbst überhaupt Sitemesh keinen Hinweis, ich glaube, es Sinn, auf hohem Niveau macht, aber ich mag es immer noch nicht, dass die ganze Seite erneut analysiert wird.

Das zweite Problem ist, Sitemesh Schuld nicht wirklich; gegeben es die Servlet API, mit zu arbeiten, weiß ich nicht, was sonst könnte es tun. Aber es macht ich frage mich, ob eine DOM-basierte Alternative zu dem Stream-basierten Servlet API wertvoll sein könnte. Mit anderen Worten, anstatt Servlets schreiben ihre Ausgabe in einen Stream, was passiert, wenn sie Knoten an einen Baum hinzugefügt? Dies würde erzwingen wohlgeformten Ausgang und macht es billiger strukturelle Veränderungen zu tun, wie Sitemesh tut, oder codieren Ausgabe in verschiedenen Formaten wie XHTML, HTML oder JSON on the fly.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top