ich bastel mir gerade einige JSP-Seiten zusammen.
Dabei habe ich eben eine index.jsp. In dieser ist mit CSS der komplette Aufbau und ich möchte quasi immer nur den verschiedenen Inhalt per include einfügen.
Also index.jsp?seite=kontakt, hol ich mit den get-parameter und lade mir per include die Kontakt-Datei rein. So habe ich immer das selbe CSS-Gerüst.
So, nun ist es bei include ja so, dass er die inkludierte Seite ausgeführt wird und danach inkludiert. Mein Problem ist, ich müsste in jeder zu include-Datei alle möglichen Initialisierungen machen, die ich in der index.jsp schon lange drin haben.
Deshalb suche ich nach ner Möglichkeit einfach nur den Inhalt der Include-Dateien zu inkludieren und dann die index.jsp komplett auszuführen.
Ich habe es ist rübergekommen was ich möchte. Müsste ja eigentlich ein gängiges Problem sein, bin natürlich auch für andere Vorschläge offen
Vollständigkeitshalber-> Es geht auch dynamisch:
<jsp:include page="<%= meineSeite>" flush="true" />
Wobei man je nach Umfang evtl. über Sitemesh (oder Tiles) nachdenken sollte.
Selbst wenns geht... TU'S NICHT!!!
In PHP ist das ein riesiges Sicherheitsloch.
Code:
<?php
include($_GET['seite']);
?>
Öffnet (fast) alle Türen für eine Code-Injection. Die einzige Tür die man überwinden müsste (allow_url_fopen_wrappers) ist bei vielen Webservern schon offen. O.K. hier geht's um JSP. Warum sollte man solch einen Schmutz (wie in PHP möglich) in JSP haben wollen, wo doch die Entwicklung eines Index-Servlets (gibt's dafür auch einen Fachbegriff?) um einiges sauberer und auch noch sicherer ist?
@ARadauer: Habe das selbe Problem wie vorher. Bekomm dann beispielsweise "data cannot be resolved", obwohl data in der index.jsp bekannt ist.
@Spacerat: include($_GET['seite']); wäre auch nicht mein Plan gewesen. Hatte bisher immer. if ($_GET['seite') == "a" ) include(a.inc.php);, da sollte dein angemerkte Problem ja nicht bestehen.
Also ich habe schon lange nix mehr mit JSPs gemacht, also verzeiht mir falls ich Mist rede, aber sucht er nicht etwas wie [HIGHLIGHT="Java"]<%@ include file="seite.jsp" %>[/HIGHLIGHT] ?
@maki: Hä? Aber ist reicht doch hier vollkommen oder nicht?
So wie es jetzt ist, wird doch quasi der komplette Text aus dein Seiten einfach an die Stelle "kopiert".
Also ich habe es jetzt getestet und bisher noch nichts festgestellt, wo es Probleme geben könnte...
@maki: Hä? Aber ist reicht doch hier vollkommen oder nicht?
So wie es jetzt ist, wird doch quasi der komplette Text aus dein Seiten einfach an die Stelle "kopiert".
Hmm, jein, ich habe es ja mit If (request.getParameter("menu").equals("bla") { includ....) eingebunden, dadurch wird es zwar nicht angezeigt, ist aber trotzdem vorhanden.
Hmm, in wie weit is das denn ein Problem? Also ich habe ca. 30 verschiede Seiten die inkludiert werden sollen. Nach dieser Methode habe ich dann ja den Text aller 30 Seiten gleichzeitig in meiner Datei... obwohl immer nur eines gebraucht wird.
Ist es da sinnvoller sowas wie Tiles zu nutzen?
Die 30 Seiten bestehen fast immer nur aus einem (kleinen) Forumular...
Ich hoffe du hast gemerkt dass die include direktive etwas anders funktioniert
Die wird nämlich immer ausgeführt, da hilft auch kein if.
Tiles fand ich ich damals ok (damals hatte es noch eklige Bugs, aber damals hatte alles eklige bugs) und nicht allzu kompliziert, hat auch Prima mit struts(1.1) zusammengepasst.
Wenn du JSPs dynamisch includieren willst, geht die include direktive schon mal gar nicht, denn diese ist statisch.
Theoretisch würde jsp:include gehen, ist aber leider unbrauchbar in der "roh form".
scheinbar ein einfaches problem und eigentlich ein use case den man fast bei jedem projekt begegnet...
da braucht man sich nicht wundern, da jsp nie die verbreitung von php erreichen wird....
kenn einige teams da sind taglibs ziehmlich verpönt... auch verständlich in einem team in dem jeder html und java kann, wieso sollte da noch ein pseudo tag sprache benutzt werden...
>> scheinbar ein einfaches problem und eigentlich ein use case den man fast bei jedem projekt begegnet...
Ja, JSP ist wirklich nicht das gelbe vom Ei.
>> darüber lässt sich streiben.
>> kenn einige teams da sind taglibs ziehmlich verpönt... auch verständlich in einem team in dem jeder html und java kann, wieso sollte da noch ein pseudo tag sprache benutzt werden...
Zusammen mit dem Listener-Teil. Aber das Paket "web" in org.apache.tiles gibts gar nicht.
Kann mir jemand direkt helfen oder gibts irgendeine Seite die das beschreibt für die aktuelle Version (2.1.2)?
@maki: thx, daran lags.
@ARadauer: ansich keine Schlechte Idee, vor allem weil es im Grunde nur ein Objekt ist...
Noch mal zu Tiles...
Ich habe das nu lauffähig, nur habe ich hier irgendwie gerade exakt das selbe Problem. In meiner layout.jsp wird ein Objekt definiert, welches in der changeLanguage.inc.jsp verwendet wird.
Und ich bekomme für changeLanguage.jsp: data cannot be resolved.
Tiles-definition:
template="/layout.jsp" layout.jsp hat "content" als insertAttribute
<put-attribute name="content" value="/changeLanguage.inc.jsp" />
Hmmm okay,
ich habe mich nun entschieden das jsp:include zu nutzen... sind max. 2 Zeilen die ich in jede Datei schreiben muss, denke werde ich schaffen...