WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Java Servlets (Counter) (http://www.wcm.at/forum/showthread.php?t=67298)

sam4712 22.08.2002 16:12

Java Servlets (Counter)
 
hi leute

ich hab folgendes problem mit java servlets und komm einfach nicht weiter. es macht sich schon die pure verzweiflung breit :(

Szenario 1:
ich hab ein normales http servlet in dem ich eine Countervariable mit static initialisiert hab. bei jedem aufruf der doPost methode wird der counter um eins erhöht und ausgegeben. funktioniert.

Szenario 2:
ich dasselbe servet mit derselben Countervariable. Allerdings befindet sich in meinem Servlet noch eine Methode - nennen wir sie z.B. Test - die vor der doPost methode von einem MessageHandlet aufgerufen wird. Nun soll diese Methode meinen Counter um eins erhöhen. Geb ich nun die Variable im Tomcat fenster aus zeigt sie den richtigen wert an. will ich aber nun diesselbe variable in meiner doPost Methode ausgeben wird einfach nur 0 ausgegeben.
Die doPost Methode und die Test Methode zählen also diesselbe Countervariable unterschiedlich hoch.

Ich hoffe ich hab mich halbwegs verständlich ausgedrückt ;)
Weiss vielleicht irgendwer warum dies so ist bzw. wie man das umgehen kann.

bin fuer jede hilfe dankbar

gruss

sam

Who-T 24.08.2002 01:07

hmm, etwas code wäre hilfreich

ansonsten kann ich dir nur sagen, dass es vom servlet an sich nur eine instanz gibt.

sprich

Code:

class A extends HttpServlet
{
 public int counter;

 public void doPost ....

}

würd das selbe ergebnis bringen wie counter als static, weils eben nur ein objekt davon gibt.


die methodenaufrufe selber dagegen werden als threads aufgerufen, können also parallelläufig sein, was für den counter gleichzeitig ein problem darstellen kann, da counter++ keine atomare operation ist, du also das counterhochzählen mit synchronized implementieren müsstest.


keine ahnung, ob dir das jetzt irgendwie weiterhilft oder überhaupt das thema trifft, aber stell mal deinen code rein, dann gehts sicher einfacher

sam4712 25.08.2002 21:52

vielen dank mal fuer dein posting. leider bin ich bis jetzt nicht wirklich weitergekommen, aber ich stell mal die wichtigsten codestücke rein. ;)

import.....

public class mservlet extends HttpServlet implements ServiceListener,SingleThreadModel
{

....

static int counter = 0;

....

public void messageReceived(ServiceEvent evt) throws Exception
{

....

counter++; // The counter is incremented
System.out.println(counter); // and prints out the right value

....

}

....

public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{

....

out.println("Counter:" + counter); // 0 is printed out

....

}

die MessageReceived methode wird ausgeführt bevor die dopost methode ausgeführt wird. das servlet ist gleichzeitg so eine art service, das von einem Message Handler angesprochen wird. fuer mich ist es wichtig mit den werten die ich in der message received methode bekomme, in der dopost methode weiterarbeiten zu können.

wär toll wenn mir wer weiterhelfen könnte :)


lg

sam


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag