# Servlet doGet, doPost



## Generic1 (30. Mrz 2010)

Hallo,

bin mir bei den Servlets nicht ganz sicher wegen MultiThreading. und zwar wenn ich ein Servlet habe und das von einem User über eine URL aufgerufen wird und gleichzeitig von einem zweiten User aufgerufen wird, handelt es sich dann um 2 Objekte von diesem Servlet oder ist das ein Servlet und ich muss das Servlet gegen multiuser- Zugriff schützen?

Was mir klar ist, dass ich z.B.: eine Session oder den Application- Context gegen gleichzeitigen Zugriff schützen muss, das ist klar, wie ist das aber mit den Servlets?


----------



## SlaterB (30. Mrz 2010)

soweit ich weiß ist das Einstellungssache, 

nach
http://www.bioinf.jku.at/teaching/ws2006/pr-swe2/prswe/05_SERVLETS.pdf
gilt


> Servlets
> Multithreading/ Synchronisierung
> •Zugriffe auf den Server von mehreren Clients gleichzeitig möglich; pro Client wird ein eigener Threadgestartet
> –Synchronisierung beim Zugriff auf gemeinsam verwendete Objekte, z.B. static-Variablen, ServletContext-und HttpSession-Attribute
> ...



ich würde mich auf solche Spielereien gar nicht erst einlassen,
was kann schon ein Servlet, was andere Objekte nicht können?
schreibe einfach

```
public void doGet(..) {
   new XYVerarbeitung(..).start();
}
```
erstelle also ein komplett neues Objekt einer eigenen Klasse und schon kann es unmöglich Probleme geben,
darin dann beliebig Klassenattribute usw.,

die Übergabe von Request, Response, Session usw. kann etwas aufwändig sein,
dagegen helfen allgemeine Basis-Klassen, init-Methoden usw. wie ich persönlich zumindest sie immer gerne schreibe 

edit:
wenn man bestimmte Funktionalität in einem normalen Programm oder von anderen Verarbeitungsschritten (anderen Requests) aus braucht,
ist sie in einem Servlet eh unnötig kompliziert verpackt, Servlets sind tote Framework-Klassen, die bringen nix,

genauso würde ich in der Session nicht viel mehr als ein einzelnes Verwaltungs-Objekt der Anwendung speichern, das man auch so ohne Session verwenden kann,
darin dann alle Details, und sei es wieder per Map<String,Object>


----------



## Generic1 (30. Mrz 2010)

Besten Dank,
das ist eine gute Idee mit dem erzeugen eines neuen Objectes bei jeder Anfrage, wenn es sich um Stateless- Sachen handelt.
Was ich nicht versteh ist, dass das wirklich so ist, dass man doGet und doPost "synchronized" machen soll -> das wirkt sich ja ziemlich auf die Performance aus, gibt es da keine andere Möglichkeit?
Besten Dank´,


----------



## SlaterB (30. Mrz 2010)

habe ich bisher auch noch nicht überzeugend gehört, nicht zu ernst nehmen,
aber direkt dahinter ist ja auch eine 'bessere' Alternative genannt


----------

