# einfache Frage zu Servlet (Counter erzeugen)



## ernst (30. Jul 2008)

Hallo allerseits,
1)
Meine Entwicklungsumgebung ist:
Netbeans IDE 5.5
Dort steht unter Tools--> Java Platform Manager:
Platform Name: jdk 1.5 (Default)
Platform Folder: C:\Programme\Java\jdk1.5.0_06
und
Standalone-Tomcat 5.5
Ich mache ein paar Testprogramme.

2)
Ich will mit dem Programm unten einen Servlet (Counter) erzeugen:
Bei jedem Aufruf der Website wird ein Zähler aus einer Datei gelesen, erhöht, wieder in die Datei geschrieben und auf dem Client ausgegeben.

Beim ersten Aufruf von:
http://localhost:8080/counter2/myCounter2
wird (wie gewünscht) auf dem Bildschirm ausgegeben:
Das Zähler Servlet wurde 256 Mal ausgegeben.
(256 habe ich einfach  Mal zum Testen genommen, eignetlich müsste es 1 heissen).
Problem:
Wenn ich jetzt auf meinem Firefox-Browser auf
Ansicht --> Neu Laden 
gehe, kommt wieder die _gleiche_ Meldung.
Das Zähler Servlet wurde 256 Mal ausgegeben.
Es _müsste_ aber die Meldung kommen:
Das Zähler Servlet wurde 257 Mal ausgegeben.
DasProgramm springt also nie in den if-Teil von:
if(b==true){
...

Warum?


```
package myPackage2;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class myCounter2 extends HttpServlet {
    int zaehler;
    RandomAccessFile myDatei = null;    
    String realerPfad;
    String pfad;
    String dateiName;
    
    public void init() throws ServletException, UnavailableException {
        boolean b;         
        File myFile;        
   
    	try{
            myFile = new File("C:\\Programme\\Apache_Tomcat\\apache-tomcat-5.5.26\\webapps\\counter2\\zaehler.txt" ,"rw");
            b = myFile.isFile();
            if(b==true){  
myDatei = new RandomAccessFile("C:\\Programme\\Apache_Tomcat\\apache-tomcat-5.5.26\\webapps\\counter2\\zaehler.txt" ,"rw");                
                zaehler = myDatei.readInt();
                zaehler++;
                myDatei.seek(0);
                myDatei.writeInt(zaehler);			                
                myDatei.close();			
            }
            // Datei existiert nicht
            else{
                zaehler=256;            
myDatei = new RandomAccessFile("C:\\Programme\\Apache_Tomcat\\apache-tomcat-5.5.26\\webapps\\counter2\\zaehler.txt" ,"rw");                
                myDatei.writeInt(zaehler);	
                myDatei.close();			                
                
            }
        }
        catch(FileNotFoundException e){
            //System.out.println("Fehler: Datei nicht vorhanden: "+e.toString());
	}
	catch(IOException e){
            //System.out.println("Fehler: Datei nicht schließbar:");
            //e.printStackTrace();
	}
    }


    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Zähler Servlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Das Zähler Servlet wurde " +zaehler + " Mal aufgerufen</h1>");
        out.println("</body>");
        out.println("</html>");
        out.close();
    }

}
```

mfg
Ernst


----------



## homer65 (30. Jul 2008)

Bei jedem Aufruf der Seite wird die Methode doGet durchlaufen, aber nicht die Methode init.


----------



## ernst (30. Jul 2008)

homer65 hat gesagt.:
			
		

> Bei jedem Aufruf der Seite wird die Methode doGet durchlaufen, aber nicht die Methode init.


Aaaah... Das war es. Habe ewig an dem Zeug rumprobiert. Ohne deinen Hinweis hätte ich den Fehler immer wo anders gesucht und nie gefunden. Vielen Dank!!!!
Ich mache jetzt an dem Programm weiter.
Falls sich noch Fragen ergeben, werde ich sie hier stellen.

mfg
Ernst


----------



## ernst (30. Jul 2008)

homer65 hat gesagt.:
			
		

> Bei jedem Aufruf der Seite wird die Methode doGet durchlaufen, aber nicht die Methode init.



1)
Habe jetzt das Zurückschreiben des aktuellen Zählerstandes in die Datei in der Methode
destroy()
gemacht.
Leider wird aber nichts zurückgeschrieben, wenn ich den Tomcat mit 
shutdown.bat 
oder indem ich ich einfache durch Wegklicken
beende.
Warum?

2)
Warum wird in dem Servlet mit einer Anweisung wie
System.out.println("Hallo");
nichts auf dem Bildschirm ausgegeben?
Wie kann man eine Bildschirmausgabe erzwingen (wäre wichtig um z.B. bei Fehlersuche
Variablenwerte anschauen zu können)?


mfg
Ernst


```
package myPackage2;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class myCounter1 extends HttpServlet {
    int zaehler;
    RandomAccessFile myDatei = null;    
    String realerPfad;
    String pfad;
    String dateiName;
    
    public void init() throws ServletException, UnavailableException {
        String tempString;
        boolean b;         
        File myFile;        

        realerPfad = this.getServletContext().getRealPath("counter1");
        //pfad = realerPfad.substring(0, realerPfad.indexOf("\\counter1"));
        pfad = realerPfad.substring(0, realerPfad.indexOf("."));        
        pfad = realerPfad.substring(0, realerPfad.indexOf("\\counter1"));        
        //dateiName = pfad+"\\counter1"+"\\zaehler.txt";
        dateiName = pfad+"\\zaehler.txt";        

        dateiName = "C:\\Programme\\Apache_Tomcat\\apache-tomcat-5.5.26\\webapps\\counter1\\zaehler.txt";                        

   
    	try{
            // Ein Objekt anlegen und mit einer Datei "verbinden"
            // Dies bedeutet nicht, dass es diese Datei schon gibt!
            myFile = new File(dateiName);
            // Prüfen, ob diese Datei auch existiert		
            b = myFile.isFile();
            // Datei existiert schon
            if(b==true){  
                // Datei öffnen
                myDatei = new RandomAccessFile(dateiName,"rw");
                // Datei auslesen
                tempString = myDatei.readLine();                
                // Datei ist leer
                if(tempString == null){
                    zaehler=0;
                }
                // Es befindet sich keine int-Zahl in der Datei 
                else if(tempString.length()!=4){
                    zaehler=0;                    
                    //zaehler = Integer.parseInt(tempString);
                }
                else{
                    zaehler = myDatei.readInt();
                }
                    // schließe Datei
                myDatei.close();			
            }
            // Datei existiert nicht
            else{
                // Datei anlegen und öffnen                
                myDatei = new RandomAccessFile(dateiName,"rw");                
                zaehler=1;            
                myDatei.close();			                
            }
        }
        catch(FileNotFoundException e){
            // Eine mögliche Ausgabe (genauere Fehlerbeschreibung) 
            // mit toString()
            System.out.println("Fehler: Datei nicht vorhanden: "+e.toString());
	}
	catch(IOException e){
            System.out.println("Fehler: Datei nicht schließbar:");
            // Andere mögliche Ausgabe (genauere Fehlerbeschreibung) 
            // mit printStackTrace()
            e.printStackTrace();
	}
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Zähler Servlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Das Zähler Servlet wurde " +zaehler + " Mal aufgerufen</h1>");
        zaehler = zaehler + 1;
        out.println("</body>");
        out.println("</html>");
        out.close();
    }

    public void destroy(){
        try{
            myDatei.seek(0);            
            myDatei.writeInt(zaehler);			                
            myDatei.close();            
        }
        catch(FileNotFoundException e){
            // Eine mögliche Ausgabe (genauere Fehlerbeschreibung) 
            // mit toString()
            System.out.println("Fehler: Datei nicht vorhanden: "+e.toString());
	}
	catch(IOException e){
            System.out.println("Fehler: Datei nicht schließbar:");
            // Andere mögliche Ausgabe (genauere Fehlerbeschreibung) 
            // mit printStackTrace()
            e.printStackTrace();
	}
    }
}
```


----------



## homer65 (30. Jul 2008)

System.out.println("text");
Wird nicht auf den Bildschirm, sondern in die Log Dateien des Tomcat geschrieben. Einfach mal in den Ordner log gucken. Das kann aber sehr unübersichtlich sein, da auch noch viel anderes in die Log's geschrieben wird.


----------



## ernst (30. Jul 2008)

homer65 hat gesagt.:
			
		

> System.out.println("text");
> Wird nicht auf den Bildschirm, sondern in die Log Dateien des Tomcat geschrieben. Einfach mal in den Ordner log gucken. Das kann aber sehr unübersichtlich sein, da auch noch viel anderes in die Log's geschrieben wird.



Bist du sicher?

1)
Bei mir heißt der Ordner 
logs

2) 
Habe das gesamte Tomcat-Verzeichnis einschließlich Unterordner
nach der Bildschirmausgabe
HALLO WELT
durchsucht, aber nichs gefunden!

mfg
Ernst


----------



## homer65 (30. Jul 2008)

Ich bin sicher. Ok der Ordner logs und nicht log. Habe es gerade noch mal ausprobiert. Die Einträge sind bei mir am Ende der Datei catalina.out im Ordner logs zu finden.


----------



## ernst (30. Jul 2008)

homer65 hat gesagt.:
			
		

> Ich bin sicher. Ok der Ordner logs und nicht log. Habe es gerade noch mal ausprobiert. Die Einträge sind bei mir am Ende der Datei catalina.out im Ordner logs zu finden.


Bei mir wurden heute nur folgende Dateien im Ordner logs angelegt:

admin.2008-07-30.log                           0 KB
host-manager.2008-07-30.log                0 KB
manager.2008-07-30.log                       0 KB
catalina.2008-07-30.log                         3 KB
localhost.2008-07-30.log                       2 KB

catalina.out gibt es nicht bei mir.

mfg
Ernst


----------

