# servlet bedienen mit get und post parameter



## servlet1234 (8. Dez 2009)

hallo an alle,

ich habe mir ein servlet geschrieben. dieses servlet bietet mehrere methoden an etwas in einer datenbank anzulegen. anhand eines get-parameters "action=nummerxyz" wird vom client aus entschieden was in der doGet methode des servlets passieren soll. die methoden im servlet erwarten unterschiedliche parameter. da ich mit den methoden daten in einer datenbank anlegen will und ich bisher alle werte immer per get, also an die url anhänge, übergebe finde ich das etwas unsicher. es kann dann jeder der die uri kennt und die parameter daten in die datenbank schreiben. :-(

ich hatte gedacht, dass ich noch eine art authenifizierung übergebe per post und diese mit festwerten im servlet abgleich. das heißt ich übergebe die daten zur anlage in der datenbank als get-params und zusätzlich noch passwort und benutzername als post. geht das überhaupt  ? und wenn ja, wie mach ich das mit dem post ohne ein formular ausführen zu müssen, also ohne click auf button.

vielen grüße und danke!
reinhold


----------



## Tobias (8. Dez 2009)

Geht IMHO nicht (und wäre auch nicht sicher, schließlich kann man den POST-Verkehr auch mitlesen, wenn auch aufwendiger). Ich stand aber mal vor einem ähnlichen Problem und habe das so gelöst, das ich einen Authentifizierungsparameter per GET mit übergeben habe. Damit der nicht einfach kopiert werden kann, habe ich den wie folgt generiert:

Pseudo-Code

```
sha1(<Request-String der URL> + <geheimer Token>).substring(7, 23);
```

Dieser Parameter ändert sich also mit den übergebenen Daten, kann aber leicht auf der Serverseite geprüft werden, solange der geheime Token beidseitig bekannt ist. Die Zahlenwerte bei substring() sind natürlch ausgedacht und können willkürlich festgelegt werden, sofern man überhaupt einen Substring bilden will.


----------



## servlet1234 (8. Dez 2009)

hallo tobias,

das geht echt nicht, ok! hab gedacht das geht ihrgend wie 

kann man evt. auf dem client die get parameter einfach in der art url?parm1=wert1&param2=wert2 an die url anhängen und noch zusätzlich werte per post und diese get und post parameter dann in der doPost methode abprüfen mit getParameter? ich hab es noch nicht geprüft, aber würde das theoretisch gehen oder kann ich in der getPost gar nicht darauf zugreifen?

gruß und danke


----------



## Tobias (8. Dez 2009)

Naja, müßte man ausprobieren, ob das dann noch geht von wegen Mapping und so, aber vor allem ist deine Idee nicht sicher! Die per Post mitzuschickenden Daten müssen genauso an den Client gegeben werden wie die GET-Parameter aus der URL. Nur weil sie nicht so offensichtlich sind, heißt das noch lange nicht, dass man nicht drankommt! Einmal in den Quellcode gucken reicht.


----------



## X3TitanCore (8. Dez 2009)

Das hier könnte dir helfen.

Understanding Login Authentication

Und dann solltest du natürlich SSL nicht vergessen damit nicht jeder mitlesen kann.


----------



## servlet1234 (9. Dez 2009)

hallo tobias,

vielen dank für deine hilfe. ich hab es mit dem sha1 bzw md5 gemacht!!

super idee, danke


----------



## servlet1234 (9. Dez 2009)

hallo,

ich bin doch noch nicht ganz fertig 
mir ist gerade eingefallen, dass ich noch eine thema offen habe und zwar, wenn ich die url vom client aufrufe. das ganze ist ja statuslos. wie bekommt der aufzurufende client mit wenn die aktion die durch die url ausgeführt wurde erfolgreich war. gibt es da auch einen workaround?

grüße und nochmal danke!


----------



## Tobias (9. Dez 2009)

Wenn ich per HTTP eine URL aufrufe, bekomme ich immer eine Antwort. Im Regelfall eine HTML-Seite, die der Browser darstellen soll, mindestens aber einen Statuscode. Wo ist das Problem?


----------



## X3TitanCore (9. Dez 2009)

Da ich mal annehme das du das in Bezug auf Servlets meinst, machst du das über das Response Objekt.

Du holst dir einen PrintWriter aus dem Response Objekt und gibst die Antwort für den Client damit aus. Die Antwort kannst du dann per Ajax oder was auch immer abfangen.



```
PrintWriter out = response.getWriter();
out.println("Servlet Antwort für den Client");
```


Oder bei einer JSP


```
request.setAttribute("Variablenname", "Wert");
RequestDispatcher view = request.getRequestDispatcher("index.jsp");
view.forward(request, response);
```

Du kannst dann in der JSP auf den "Variablenname" zugreifen.


----------



## servlet1234 (9. Dez 2009)

hi,

ich würde die frage vielleicht nochmal anders stellen wollen.

wie kann ich denn dafür sorgen das die getPost methode am servlet aufgerufen wird ohne das ich ein button in einem form drücke? geht das überhaupt oder kann ich das nur über ein form machen?

ich hab nämlich gedacht das ich ein methode anbiete die ein anderes servlet aufruft mit 


```
httpResponse.sendRedirect("http://localhost:8084/WebApplication1/RequestServlet");
```

und einen parameter setzt mit 

```
httpResponse.setHeader("param1", "wert1");
```

in diesem anderen servlet kann ich dann den parameter mit 
[JAVArequest.getParameter("param1")[/code]

abrufen. geht leider nicht als erstens wird das ganze per get gesendet und zweitens ist der param1 null.

gruß


----------



## X3TitanCore (9. Dez 2009)

Ich weiß gerade nicht genau was du damit erreichen willst. An die Daten des anderen Servlets kommst du doch auch so ran? Ansonsten kannste die doGet in die doPost umleiten.

Gruß


----------

