# JSPs programmatisch erstellen



## hasenbrot (26. Apr 2012)

Ich würde gerne wissen ob es möglich ist, JSPs programmatisch zu erzeugen, so dass ich aus einem Datensatz automatisch eine neue Seite erzeugen kann.


----------



## maki (26. Apr 2012)

Ja, ist es.

Ist es sinnvoll?

Eher nein, gibt Ausnahmen...


----------



## Final_Striker (26. Apr 2012)

Könntest du das vielleicht an einem Beispiel erläutern? Was aus was erstellt werden soll.


----------



## hasenbrot (26. Apr 2012)

Ich dachte z.B. an eine Online-Community oder einen Online-Shop. Letztlich soll also aus einer Menge von Datensätzen, die beliebig vergrößert und verkleinert werden kann, pro Datensatz eine Seite erzeugt werden, die auf einem JSP-Template basiert. Leider habe ich zu dem Thema nirgendwo eine Anleitung finden können.


----------



## anti-nerd (26. Apr 2012)

Hmmn, also ich will jetzt nicht so tun, als hätte ich besonders große ahnung, aber "Templating" ist meiner Meinung ein gutes Beispiel für einen Fall, bei dem es besser wäre die Seiten nicht programmatisch zu erstellen. Außerdem sind Communities und Webshops mit irgendwelchen Datenbanken, Gebiete, die so oft mit JSP in Kontakt kommen, dass es mit Sicherheit weniger exotische Lösungen für diese "Standardsituationen" gibt.

Wie falsch liege ich?


----------



## maki (26. Apr 2012)

Liegst genau richtig anti-nerd.

JSPs sind eigentlich schon templates...


----------



## fastjack (26. Apr 2012)

Warum nimmst Du kein Servlet?


----------



## hasenbrot (26. Apr 2012)

Ein Servlet ist ein ganz normales Objekt, das in meinem Fall von HTTPServlet abgeleitet würde, davon könnte ich also beliebig viele Instanzen erstellen. Das Problem ist nur, dass sich ein Servlet nur umständlich mit HTML gestalten lässt, deshalb wollte ich gerne JSPs programmatisch erstellen.


----------



## maki (27. Apr 2012)

hasenbrot,

JSPs sind eigentlich schon Templates, du möchtest durch ein Template, ein Template erstellen... 
Genauso ist eine eine doppelte/vierfache Verneinung immer noch ein "Ja", aber eben umständlicher, in diesem Falle viel umständlicher.

Es gibt ein paar Taglibs welche die eingeschränkten Templating Möglichkeiten von JSPs besser ausnutzen bzw. erweitern, aber ich denke dass du bessere Antworten bekommst wenn du konkreter erklärst was du vorhast.


----------



## hasenbrot (27. Apr 2012)

Ich habe an ein CMS wie TYPO3 gedacht, wo ich einfach ein HTML-Template hochlade, das dann für beliebig viele Seiten genutzt werden kann. Bei JSP würde man für jede Art von Ansicht eine JSP-Datei erstellen, die dann wiederum für beliebig viele Inhaltsdatensätze genutzt werden kann. Ist das so richtig? 
Wie ich dann aber im Controller-Servlet die Navigation aufbaue, ist mir noch nicht klar. Ich würde dann wahrscheinlich immer wieder dieselbe JSP aufrufen, nur eben mit unterschiedlichen Parametern.

Im einfachsten Fall wäre der Controller ungefähr so aufgebaut:


```
if (request.getParameter("btn1)) {
          addresse = "seite1.jsp"; 
else (request.getParameter("btn2")) {
          addresse = "seite2.jsp"; 

 RequestDispatcher d = request.getRequestDispatcher(addresse);
   d.forward(request, response);
```

Das Problem ist aber, dass ich keine seite2.jsp aufrufen will, sondern seite1.jsp mit einem anderen Datensatz.


----------



## fastjack (28. Apr 2012)

Es gibt doch Template-Engine zu Häuf, besonders für Servlets. Velocity kannst Du auch verwenden. Oder schreib Dir Deine eigene, ist auch eigentlich kein Ding.


----------



## hasenbrot (15. Mai 2012)

Um das zu verstehen muss ich erstmal ganz einfache Grundfunktionen hinbekommen, z.B. eine JSP abhängig von dem Link, den ich anklicke, mit unterschiedlichem Inhalt füllen.
Wenn ich also einen Link anklicke, müsste über eine Variable festgelegt werden, dass die JSP mit den Daten aus einer ganze bestimmten XML-Datei gefüllt werden soll, wobei ich aber nicht weiß, ob ich das XML lieber auf dem Client oder Server parse. Die XML-Daten werden nach dem Parsen in einem Bean-Objekt gespeichert.

Ein Beispiel wäre eine einfache Seite mit ein paar Kochrezepten. Wenn ich ein Rezept anklicke wird eine zweite Seite aufgerufen, die mit den zu dem jeweiligen Rezept gehörenden Daten gefüllt wird. Die Daten selbst liegen in einer XML-Datei.


----------

