combel
11.03.2003, 18:33
Hallo,
dies ist mein erster Post hier und ich habe ein kleines Problem mit meinem Webserver,
den ich in Java geschrieben habe.
Der Server arbeitet threadgesteuert mit Sockets und implementiert das HTTP-Protokoll nach
RFC. Eine typische Anfrage mit Serverantwort sieht so aus:
Request: GET /index.htm HTTP/1.1
Filename: index.htm
Serverantwort
HTTP/1.1 200 OK
Date: Tue Mar 11 18:13:18 CET 2003
Server: experimental webserver
Connection: close
<html>
<head>
<title>HTML-Testseite für Webserver</title>
</head>
<body>
<h1>Dies ist eine Testseite für den experimental webserver.</h1>
<p>
<img src="bild_1.jpg">Bild1</img>
</body>
</html>
Der Server arbeitet soweit fehlerfrei und liefert den HTMl Code je nach Request
zurück. Bis auf einen kleinen Fehler: die Bilder werden im Browser verfälscht angezeigt.
Dies liegt meines Erachtens nach im Dateistrom des Bildes. Hier der Java-Code, welcher die
Datei ausliest und den Datenstrom als String speichert:
private String getFileContent(File directoryFile, String filename) {
BufferedReader in;
StringBuffer stringBuffer = new StringBuffer();
if (existsFile(directoryFile, filename)) {
try {
File file = new File(
directoryFile.getName() +
directoryFile.separatorChar +
filename);
FileInputStream inFile = new FileInputStream(file);
in = new BufferedReader(new FileReader(file));
while(in.ready()) {
stringBuffer.append(in.readLine() + "\n");
}
return stringBuffer.toString();
}
catch (FileNotFoundException e) {
System.err.println("File " + directoryFile.getName() + " nicht gefunden.");
System.err.println(e.getMessage());
}
catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
}
return null;
}
Es wird praktisch ein FileInputStream aus der HTMl-/ oder Bilddatei erstellt,
welcher zeilenweise ausgelesen und über einen StringBuffer als String zurückgegeben wird.
In der aufrufenden Methode wird dieser String dann an den Ausgabestroms des ServerSockets gesendet.
Wer weiß einen richtigen Weg, z.B. das bitweise Übertragen der Filedaten? Geht das auch ohne die
Bildung eines Strings? Wie schon geschrieben, das Problem liegt nur bei Grafiken (JPEG, GIF...) vor.
Vielen Dank vorerst, Dirk
dies ist mein erster Post hier und ich habe ein kleines Problem mit meinem Webserver,
den ich in Java geschrieben habe.
Der Server arbeitet threadgesteuert mit Sockets und implementiert das HTTP-Protokoll nach
RFC. Eine typische Anfrage mit Serverantwort sieht so aus:
Request: GET /index.htm HTTP/1.1
Filename: index.htm
Serverantwort
HTTP/1.1 200 OK
Date: Tue Mar 11 18:13:18 CET 2003
Server: experimental webserver
Connection: close
<html>
<head>
<title>HTML-Testseite für Webserver</title>
</head>
<body>
<h1>Dies ist eine Testseite für den experimental webserver.</h1>
<p>
<img src="bild_1.jpg">Bild1</img>
</body>
</html>
Der Server arbeitet soweit fehlerfrei und liefert den HTMl Code je nach Request
zurück. Bis auf einen kleinen Fehler: die Bilder werden im Browser verfälscht angezeigt.
Dies liegt meines Erachtens nach im Dateistrom des Bildes. Hier der Java-Code, welcher die
Datei ausliest und den Datenstrom als String speichert:
private String getFileContent(File directoryFile, String filename) {
BufferedReader in;
StringBuffer stringBuffer = new StringBuffer();
if (existsFile(directoryFile, filename)) {
try {
File file = new File(
directoryFile.getName() +
directoryFile.separatorChar +
filename);
FileInputStream inFile = new FileInputStream(file);
in = new BufferedReader(new FileReader(file));
while(in.ready()) {
stringBuffer.append(in.readLine() + "\n");
}
return stringBuffer.toString();
}
catch (FileNotFoundException e) {
System.err.println("File " + directoryFile.getName() + " nicht gefunden.");
System.err.println(e.getMessage());
}
catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
}
return null;
}
Es wird praktisch ein FileInputStream aus der HTMl-/ oder Bilddatei erstellt,
welcher zeilenweise ausgelesen und über einen StringBuffer als String zurückgegeben wird.
In der aufrufenden Methode wird dieser String dann an den Ausgabestroms des ServerSockets gesendet.
Wer weiß einen richtigen Weg, z.B. das bitweise Übertragen der Filedaten? Geht das auch ohne die
Bildung eines Strings? Wie schon geschrieben, das Problem liegt nur bei Grafiken (JPEG, GIF...) vor.
Vielen Dank vorerst, Dirk