2009-04-15 2 views

Antwort

11

Es ist nicht machen eine Verbindung zum Browser - der Browser hat bereits eine Verbindung zum Server hergestellt. Es puffert entweder, was Sie im Speicher schreiben und überträgt dann die Daten am Ende der Anfrage, oder es stellt sicher, dass alle Header in die Netzwerkverbindung geschrieben wurden und gibt dann eine PrintWriter zurück, die Daten direkt in diese Netzwerkverbindung schreibt.

Im Pufferungsszenario gibt es möglicherweise eine feste Puffergröße, und wenn Sie diese überschreiten, werden die bisher geschriebenen Daten an die Netzwerkverbindung "geleert". Der große Vorteil eines Puffers ist, dass wenn Sie auf halbem Wege etwas falsch machen, Sie Ihre Antwort auf eine Fehlerseite ändern können. Wenn Sie bereits mit dem Schreiben der Antwort begonnen haben, wenn etwas schief geht, können Sie nicht viel tun, um den Fehler sauber anzuzeigen.

(Es gibt auch die Frage der Übertragung der Inhaltslänge vor dem Inhalt, für Keep-Alive-Verbindungen. Wenn Sie keinen Puffer vor Abschluss der Antwort haben, bin ich zuverlässig informiert, dass die Antwort eine Chunked-Codierung verwendet .)

+0

(aufgeteilte Codierung kann den Fall behandeln, in denen Sie die Header geschrieben haben müssen, bevor die Pufferung des Inhalts abgeschlossen ist.) –

+0

@ Tom: Ich dachte, dass der Fall sein könnte aber ich war mir nicht sicher. Wird bearbeiten. –

-1

Beachten Sie auch, dass mehrere Open-Source-Implementierungen der Servlet-API verfügbar sind. So können Sie sehen, wie es gemacht werden kann.

Ich glaube, dass die offizielle Implementierung auch Open Source ist und im Glassfish Server enthalten ist.

0

Eine recht einfache Implementierung:

PrintWriter getWriter() throws java.io.IOException { 
     return new PrintWriter(socket.getOutputStream()); 
} 
Verwandte Themen