Auswerten von Formulardaten
Daten aus HTML Formularen werden von Tomcat in das request Objekt gepackt. Dabei ist es unerheblich, ob die Daten mit GET oder POST gesendet wurden. Sie habe Zugriff auf die Formdaten mit:
request.getParameter("paramName");
Bitte verwenden Sie nicht request.getAttribute("aName"), Attribute sind etwas anderes, dazu kommen wir noch.
Bitte betrachten Sie nun das Beispiel form_simple.jsp und öffnen Sie den Sourcecode in ein anderes Browserfenster. Betrachten wir das Beispiel:
In den Zeilen 12 bis 18 steht das Eingabeformular:
Wie Sie sehen, wird das Formular mit POST an dieselbe Seite geschickt. Die Checkbox hat den Namen "yes", das Eingabefeld für die E-Mail Adresse den Namen "mail".
Da das Formular an dieselbe Seite geschickt wird, müssen wir unterscheiden, ob das Formular oder die Antwort auf die Eingabe anzuzeigen ist. Das passiert in Zeile 4: Wenn die Seite nicht mit POST aus dem Formular aufgerufen wurde, sind alle Parameter null, anderenfalls ist der Parameter "mail" nicht null, denn ein Input-Feld wird immer gesendet. Wenn es keinen Text enthält, ist sein Wert ein leerer String ("").
Code: /bsp/kap1/form_simple.jsp
<%
if (request.getParameter("mail")==null) {
// Parameter "mail" nicht gefunden; wir zeigen das
// Formular an.
%>
Die Zeilen 25 ff enthalten die Reaktion auf die Formulareingabe. Selbstverständlich überprüfen wir die eingegebenen Werte und geben dem User ein Feedback zu seiner Aktion:
Zunächst überprüfen wir die Checkbox. Wenn eine Checkbox nicht ausgewählt ist, wird sie nicht gesendet, daher ist der Parameter in diesem Fall null. On the fly geben wir eine Reaktion aus. Wenn das soweit ok ist, nehmen wir uns den Parameter "mail" nochein mal vor.
Code: /bsp/kap1/form_simple.jsp
// Eingabe überprüfen
if (request.getParameter("yes")== null) {
// Checkbox wurde nicht angezeigt; der Browser sendet das Feld nicht
out.println(" Schade, dass Sie unseren Newsletter nicht wollen!");
} else if (request.getParameter("mail").equals("user@host.com")) {
// default Mailadresse wurde nicht ver?ndert
out.println("Das ist unsere Mailadresse: "+request.getParameter("mail") +
"
Bitte geben Sie Ihre eigene an!");
} else if (request.getParameter("mail").length()==0) {
// Mail ist leer
out.println("Bitte geben Sie Ihre E-Mail Adresse an!");
} else if (!request.getParameter("mail").matches("[\\.\\w]{2,}@[\\.\\w]{3,}\\.[\\w]{2,}")) {
// E-Mail Adresse mit regul?ren Ausdr?cken ?berpr?fen
out.println("Ihre E-Mail Adresse scheint ung?ltig:" +request.getParameter("mail")+"");
} else {
// ToDo: Insert E-Mail Address into Newsletter Database!
Der Parameter "mail" darf nicht unsere vorgegebene Beispieladresse sein, er darf nicht leer sein und er muss im Groben dem Format einer E-Mail Adresse entsprechen. Wir Überprüfen dies mittels eines regulären Ausdrucks. (Hinweis: Diese Methode steht erst ab Java 1.4 zur Verfügung. Wenn Sie ein 1.3 er JDK benutzen, löschen Sie bitte die Zeilen 36-38). Wenn alles OK ist, tragen wir die Mailadresse in die Datenbank ein und geben dem User positives Feedback.
Besondere Probleme ergeben sich, wenn ein Eingabeelement die Mehrfachauswahl zulässt. Der Request stellt dann unter einem Namen eine ganze Reihe von Werten zur Verfügung. Benutzen Sie in diesem Fall: request.getParameterValues("multiSelectName"); Sie erhalten ein String[], dass Sie entsprechend auswerten können:
Code: /bsp/kap1/form_multiple.jsp
<% String[] selectedTowns=request.getParameterValues("towns");
for (int i=0;i
Tipp:
Lösen Sie nun die Aufgabe TimeZones2.jsp