# Servlets und PrintWriter



## javanse (10. Jun 2005)

Hallo!

Bin neu hier und habe auch gleich eine Frage...
Ich programmiere gerade ein umfangreicheres Servlet, das sich bei den Methoden verschiedener eigener Klassen bedient. In meiner doGet-Methode habe ich mir einen PrintWriter erstellt, damit ich Ausgaben an den Browser schicken kann.


```
res.setContentType("text/html");
                PrintWriter out = res.getWriter();
```

Was mich nervt ist jetzt, dass andere Klassen diesen PrintWriter nicht kennen und ich ihn jedesmal wenn ich eine Instanz einer anderen Klasse erzeuge dem Kontruktor mit übergeben muss.

Beispiel:


```
DataManager dm = new DataManager(out);
```

Der Konstruktor vom DataManager sieht dann z.B. so aus:


```
public class DataManager {
        
        // globale Variablen
        private PrintWriter out;
        private static Connection connection = null;
        
        
        
        // Konstruktor
        public DataManager(PrintWriter out) {
                
                try {
                        
                        this.out = out;
                        
                        // Startup-Meldung
                        out.print("Starting DataManager()... ");

usw.
```

Gibt es da eine elegantere Möglichkeit diesen PrintWriter global für alle Klassen verfügbar zu machen?


Gruß,
javanse


----------



## Bleiglanz (10. Jun 2005)

nein, das ist unmöglich

der PrintWriter ist ja nur für die Lebensdauer eines Requests sichtbar, du kannst ihn also nirgendwo "hinspeichern"

überleg dir lieber ein besseres Design, warum sollte z.B. der DataManager irgendwas vom "Ausdrucken" wissen


besser:

=> deine Hilfsklassen liefern dir "Java Objekte"

=> und dann gibts welche ("View"), die das mit Hilfe eines Printwriters in HTML rausschreiben


----------



## javanse (10. Jun 2005)

Hi!

 ui das ging ja schnell! Generell hast Du Recht und der DataManager sollte nichts mit Ausgaben zu tun haben. Allerdings möchte ich gerne eine Möglichkeit haben für Debugging-Zwecke in jeder Klasse ab und zu mal eine Variable ausgeben zu können. Daher wollte ich etwas haben, auf das alle Klassen global zugreifen können.

Irgendeine Idee, wie ich Statusmeldungen und Debugzeugs zwischendurch ausgeben kann, ohne dass ich jetzt extra den PrintWriter in alle Klassen einschleifen muss?


Gruß, javanse


----------



## Bleiglanz (10. Jun 2005)

System.out.println

schreibt beispielsweise beim tomcat einfach in logfile (schau mal ins Catalina-Verzeichnis in "log")

oder du nimmst gleich log4j oder sowas...


was anderes ists natürlich, wenn du diese Ausgaben im Html haben willst


----------



## javanse (10. Jun 2005)

Bleiglanz hat gesagt.:
			
		

> was anderes ists natürlich, wenn du diese Ausgaben im Html haben willst


Das war das woran ich gedacht hatte


----------



## KSG9|sebastian (10. Jun 2005)

dann nimm ne logging engine und speicher von mir aus in nen temp ordner (System.getProperty("java.io.tmpdir") müsste es sein) und schreib dir noch ein Servlet welches die log-datei als HTML ausgibt.


----------

