Hallo und guten Tag!
Muss die erweiterte Klasse von TagSupport und deren Methoden doStart(), doAfterBody() und doEnd() bei klassischen Tags multi-thread-sicher sein?
Arbeite mich gerade in das Thema Servlets und JSP ein und bin bei den klassischen Tag-Handler angelangt. In meinem Buch wird darauf hingewiesen, dass SimpleTagSupport-Klassen immer nur einmal verwendet werden. Bei jedem Aufruf wird eine neue Instanz erstellt.
Im Gegensatz können TagSupport-Klassen durch den Container in einem Pool verwaltet werden und mehrfach verwendet werden.
Es wird darauf hingewiesen, dass Instanzvariablen, die es nur einmal pro Instanz gibt, immer in der Methode doStart() initialisiert werden sollen da sie sonst noch einem alten Wert aus der letzten Verarbeitung haben.
Beispiel:
public class DasIteratorTag extends TagSupport {
Der obige Beispielcode (aus dem Buch) funktioniert nach meiner Meinung nur, wenn der Container mir garantiert, dass immer nur ein Thread alleine durch die Methoden doStartTag(), doAfterBody() und doEntTag() läuft.
Daher meine Frage;
Muss die erweiterte Klasse von TagSupport und deren Methoden doStart(), doAfterBody() und doEnd() bei klassischen Tags multi-thread-sicher sein?
Oder wird mir vom System (Container) garantiert, dass immer nur ein Thread von Anfang bis Ende durch alle Methoden läuft?
Im Voraus besten Dank für eure Bemühungen.
Philipp
Muss die erweiterte Klasse von TagSupport und deren Methoden doStart(), doAfterBody() und doEnd() bei klassischen Tags multi-thread-sicher sein?
Arbeite mich gerade in das Thema Servlets und JSP ein und bin bei den klassischen Tag-Handler angelangt. In meinem Buch wird darauf hingewiesen, dass SimpleTagSupport-Klassen immer nur einmal verwendet werden. Bei jedem Aufruf wird eine neue Instanz erstellt.
Im Gegensatz können TagSupport-Klassen durch den Container in einem Pool verwaltet werden und mehrfach verwendet werden.
Es wird darauf hingewiesen, dass Instanzvariablen, die es nur einmal pro Instanz gibt, immer in der Methode doStart() initialisiert werden sollen da sie sonst noch einem alten Wert aus der letzten Verarbeitung haben.
Beispiel:
public class DasIteratorTag extends TagSupport {
int filmZähler;
public int doStartTag() throws JspException {
public int doAfterBody() throws JspException {
public int doEndTag() throws JspException {
}public int doStartTag() throws JspException {
filmZähler=0;
...
return EVAL_BODY_INCLUDE;
}...
return EVAL_BODY_INCLUDE;
public int doAfterBody() throws JspException {
filmZähler++;
…
if (filmZähler < …
}…
if (filmZähler < …
return EVAL_BODY_AGAIN;
else return SKIP_BODY;
public int doEndTag() throws JspException {
return EVAL_PAGE;
}Der obige Beispielcode (aus dem Buch) funktioniert nach meiner Meinung nur, wenn der Container mir garantiert, dass immer nur ein Thread alleine durch die Methoden doStartTag(), doAfterBody() und doEntTag() läuft.
Daher meine Frage;
Muss die erweiterte Klasse von TagSupport und deren Methoden doStart(), doAfterBody() und doEnd() bei klassischen Tags multi-thread-sicher sein?
Oder wird mir vom System (Container) garantiert, dass immer nur ein Thread von Anfang bis Ende durch alle Methoden läuft?
Im Voraus besten Dank für eure Bemühungen.
Philipp
Comment