# Servlet - Anfänger - Aufgabe



## Copperfield88 (21. Apr 2012)

Hallo,
ich habe eine Frage zur einer Übungsaufgabe zu Servlets. Ich muss dazu sagen, dass ich im Bereich Servlets noch absolute Anfängerin bin (vorgestern zum ersten Mal davon gehört). Ich hoffe ihr könnt mir da die Richtung weisen.

Aufgabenteil 1 ist:
_Sie schreiben ein Mini-StudiVZ. Man kann persönliche Daten in ein Formular eintragen, welche nachher auf einer Webseite angezeigt werden. Rezept:
•	Legen Sie ein Dynamic WebProject an
•	Schreiben Sie ein einfaches HTML-Formular
•	Schreiben Sie ein Servlet, das die Formulardaten ausliest und eine HTML-Seite erzeugt. Diese
        Seite enthält eine dreispaltige Tabelle mit eben diesen Daten:
     1.	Spalte: Feldbeschreibung, z.B. "Vorname"
     2.	Spalte: Wert, z.B. Fredi
     3.	Spalte: bleibt noch leer
•	Ändern Sie den URL-Pfad ("URL Mapping") auf "HtwgBook"
•	Lassen Sie sich die generierte Seite anzeigen_

=> Diesen Teil habe ich problemlos durchgeführt und es funktioniert. Nun kommt der schwierige Teil 2, an dem ich hänge:

_Die angezeigte Webseite, welche die Tabelle mit den persönlichen Daten enthält, soll jetzt auch editierbar sein: In der dritten Spalte befindet sich nun ein Button "ändern". Drückt man diesen Knopf, so erscheint ein Eingabefeld, in das man den neuen Wert eingeben kann. Nach "submit" wir die Tabelle mit dem neuen Wert angezeigt. Die anderen Tabellenzeilen bleiben unverändert. 
Rezept
•	Passen Sie Ihr Servlet so an, dass es eine dreispaltige Tabelle mit den Formularfeldern ausgibt.   Außerdem sollte es in der Lage sein, sich alle Werte zu "merken". Denken Sie an eine Klasse des Collection-Frameworks und die Möglichkeit, Daten Request-übergreifend zu speichern.
•	Das erzeugte Formular hat als "Action-Ziel" das gleiche Servlet. Mit einem Parameter (URL) könnten Sie dafür sorgen, dass Sie den Request an eine andere Methode des Servlets oder an eine Hilfsklasse weiterleiten._

Hiermit bin ich nun völlig überfordert. Ich vermute mit Request-übergreifend speichern wird auf das Session-Konzept angespielt und es ist eine HashMap aus dem Collection-Framework gemeint? Aber wie implementiere ich diesen Button und brauche ich dafür ein neues Formular oder nutze das schon vorher erstellte? Und vor allem: was ist mit dem Parameter gemeint, mit dem ich auf eine andere Methode im Servlet komme (ich dachte da gäbe es nur doGet und doPost und meine Session ist ja auch in der doGet-Methode angelegt).
Für einige Hinweise, wie ich am besten weitermache bzw. an welche Konzepte ich denken sollte wäre ich sehr dankbar!

P.S. Ich hoffe der Beitrag ist so in Ordnung, ist für mich das erste Mal, also gerne korrigieren oder was nachfordern.

Edit: danke fürs Verschieben hierher und ich hoffe es sieht nicht wie das Erschleichen einer Lösung aus - Tipps reichen mir schon, an den Code setze ich mich natürlich selbst.


----------



## Marcinek (21. Apr 2012)

Gibst es dazu auch eine konkrete Frage?

Imho steht in der Aufgabenstellung der korrekte Lösungsweg.


----------



## Copperfield88 (21. Apr 2012)

@Marcinek: ok ich versuche es konkreter zu formulieren: ich habe den ersten Aufgabenteil und kann mit dem zweiten gar nichts anfangen. Vielleicht könntest du mir auf die Sprünge helfen, was der nächste Schritt ist, denn leider verstehe ich die Anleitung für den zweiten Teil nicht und weiß deshalb nicht wie es weitergehen soll. 
Konkret also: wenn ich den "Ändern"-Button hinzufüge, wie komme ich von dort zum nächsten Formular (über onClick oder Submit oder gibt es nochwas und ist das überhaupt ein neues Formular) und vor allem von diesem Formular wieder zurück ins Servlet. Und brauche ich dann im Servlet eine weitere Methode oder arbeite ich mit einer einzigen doGet-Methode?

Ich hoffe das klingt nicht zu chaotisch...


----------



## Marcinek (21. Apr 2012)

Doch das ist viel zu chaotisch.

Du hast ein Formular in HTML. Das hat ein action Attribut. Da kommt dein Servelt rein.

Das Formular wird an das Servlet geschickt und abhängig von det method in doGET oder doPOST verarbeitet.

SELFHTML: HTML/XHTML / Formulare / Formulare definieren

Servlets haben Möglichkeiten HTML Seiten darzustellen. Tipp: Response

Gruß,


----------



## Copperfield88 (21. Apr 2012)

Danke Marcinek für deine Geduld. Ich habe mir jetzt noch einmal genauer versucht zu überlegen wie ich es mache.

Ich müsste dazu aber wenn ich über den "Ändern"-Button mein Servlet nochmal aufrufe an diesen Button Parameter anhängen (z.B. sowas wie type=change&field=vorname) und diese dann in der doGet-Methode auslesen um diese dort in einem If-Teil extra zu behandeln (denn ich habe ja nur eine doGet-Metode; im erwähnten If-Teil würde ich dann das Formular zum Ändern ausgeben je nachdem welches Feld geändert werden soll). Wie hänge ich solche Parameter mit action-Teil eines Formulars denn an und wie greife ich darauf in der doGet-Methode zu?

(Ich hoffe das ist jetzt etwas verständlicher und weniger chaotisch, tut mir wirklich leid).


----------



## Copperfield88 (21. Apr 2012)

Zur Verdeutlichung was ich versuchen will hier auch noch den Code der doGet-Methode meines Servlets (wie gesagt, vom initialen Eingeben der Daten ins ursprüngliche Formular bis zur ersten Anzeige durch das Servlet komme ich problemlos, erst danach habe ich Schwierigkeiten):


```
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = null;
		if(request.getParameter("type")=="change"){
			if(request.getParameter("field")=="vorname"){
				PrintWriter writer1 = response.getWriter();
				writer1.write("<form
action=\"http://localhost:8080/StudiVZ/HtwgBook?type=update&field=vorname\" method=\"GET\"><p>Vorname<input type=\"text\" name=\"vname\"></p><input type=\"submit\" value=\"Speichern\"></form>");
			}
		}
		if(request.getParameter("type")=="update"){
			if(request.getParameter("field")=="vorname"){	
				String vor = request.getParameter("vname");
				String nach = (String)session.getAttribute("nname");
				String wohn = (String)session.getAttribute("wohnort");
				String hob = (String)session.getAttribute("hobby");
				PrintWriter writer11 = response.getWriter();
				writer11.write("<table><tr><th>Parameter</th> <th>Wert</th><th>--</th></tr>"<tr><tr><td>Vorname</td><td>"+vor+"</td><td><form action=\"http://localhost:8080/StudiVZ/HtwgBook?type=change&field=vorname\" method=\"GET\"><input type=\"submit\" value=\"ändern\"></form></td></tr> <tr><td>Nachname</td><td>"+nach+"</td><td><form action=\"http://localhost:8080/StudiVZ/HtwgBook?type=change&field=nachname\" method=\"GET\"><input type=\"submit\" value=\"ändern\"></form></td></tr> <tr><td>Wohnort</td><td>"+wohn+"</td><td><form action=\"http://localhost:8080/StudiVZ/HtwgBook?type=change&field=wohno\" method=\"GET\"><input type=\"submit\" value=\"ändern\"></form><td></tr> <tr><td>Hobby</td><td>"+hob+"</td><td><form action=\"http://localhost:8080/StudiVZ/HtwgBook?type=change&field=hobb\" method=\"GET\"><input type=\"submit\" value=\"ändern\"></form><td></tr></table>");
			}
		}
		else{
			session = request.getSession();
			String vname = request.getParameter("vname");
			String nname = request.getParameter("nname");
			String wohnort = request.getParameter("wohnort");
			String hobby = request.getParameter("hobby");
			session.setAttribute("vname", vname);
			session.setAttribute("nname", nname);
			session.setAttribute("wohnort", wohnort);
			session.setAttribute("hobby", hobby);
			PrintWriter writer = response.getWriter();
			writer.write("<table><tr><th>Parameter</th>
<th>Wert</th><th>--</th></tr><tr><tr><td>Vorname</td><td>"+vname+"</td><td><form action=\"http://localhost:8080/StudiVZ/HtwgBook?type=change&field=vorname\" method=\"GET\"><input type=\"submit\" value=\"ändern\"></form></td></tr> <tr><td>Nachname</td><td>"+nname+"</td><td><form action=\"http://localhost:8080/StudiVZ/HtwgBook?type=change&field=nachname\" method=\"GET\"><input type=\"submit\" value=\"ändern\"></form></td></tr> <tr><td>Wohnort</td><td>"+wohnort+"</td><td><form action=\"http://localhost:8080/StudiVZ/HtwgBook?type=change&field=wohno\" method=\"GET\"><input type=\"submit\" value=\"ändern\"></form><td></tr> <tr><td>Hobby</td><td>"+hobby+"</td><td><form action=\"http://localhost:8080/StudiVZ/HtwgBook?type=change&field=hobb\" method=\"GET\"><input type=\"submit\" value=\"ändern\"></form><td></tr></table>");
		}
	}
```


----------

