Java lokaler WebServer - HTML funktioniert nicht

S.Kara

Captain
Registriert
Okt. 2013
Beiträge
3.407
[erledigt] lokaler WebServer - HTML funktioniert nicht

Ich habe einen eigenen WebServer in Java geschrieben, über den ich auf Dateien zugreifen kann. Das funktioniert soweit auch ganz gut.
Nur das Problem ist, dass wenn ich auf eine .html-Datei zugreife, diese nicht als HTML-Datei erkannt wird. Im WebBrowser bekomme ich dann nur den HTML-Quellcode zu sehen.
Wenn ich im Firefox Strg + S drücke will er mir die Seite auch als .txt speichern und nicht als .html.

Ähnliches Problem bei z.B. txt-Dateien: Hier wird mir der Inhalt angezeigt (was auch so sein soll), nur werden die Leerzeichen einfach ignoriert.

Hier mal ein abgespekter Code:
Code:
ServerSocket s = new ServerSocket(port);
...
Socket remote = s.accept();
...
PrintWriter out = new PrintWriter(remote.getOutputStream());
out.print("<HTML>test</HTML>");
out.flush();
remote.close();

Hier bekomme ich "<HTML>test</HTML>" angezeigt, möchte aber eigentlich nur "test" sehen.
 
Zuletzt bearbeitet:
Probier mal das vorne dran zu packen :

out.println("HTTP/1.0 200 OK");
out.println("Content-Type: text/html");

Die Komplette Anwort sollte so aussehen:

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
ETag: "3f80f-1b6-3e1cb03b"
Content-Type: text/html; charset=UTF-8
Content-Length: 131
Accept-Ranges: bytes
Connection: close


Siehe hier :

http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Server_response
 
Moin!

  1. content-type header setzen.
  2. Was zeigt er denn an, wenn du dir den Quellcode der Seite anschaust? Könnte sein, dass < und > escaped werden.
  3. Wieso schreibst du einen web-server?
 
Wenn ich die beiden Zeilen:
out.println("HTTP/1.0 200 OK");
out.println("Content-Type: text/html");

hinzufüge, bekommt ich nur eine leere Seite angezeigt. Quellcode ist ebenfalls keiner vorhanden.


Escaped wird auch nichts.
Warum ich das mache? Weil mein Boss mich damit beauftragt hat. :D
Mit Web habe ich normalerweise nichts zu tun.
 
Schau dir mal das Response Objekt mit dem FireBug an. Werden die Header Parameter richtig interpretiert?
 
Webserver sind eines der wenigen Dinge, für die es sich 0 lohnt auch nur an eine Eigenentwicklung zu denken.

Sag deinem Boss, dass es da draußen zig Webserver gibt, die deine Anforderungen erfüllen und sich im Alltag bewährt haben.
Wenn es unbedingt was eigenes sein soll, dann würde ich eine andere Programmiersprache (z.B. Python, GO) empfehlen.
Dort kann man webserver in einer Zeile erstellen.

ist ja mal sowas von out :D Mittlerweile hat FireFox ein richtig gutes Entwicklertool.
 
Zuletzt bearbeitet:
@ SaxnPaule
FireBug zeigt mir folgenden Inhalt an:
<html>
<head></head>
<body></body>
</html>
Ich weiß nicht ob es das war was du wissen wolltest, kannte FireBug bis jetzt nicht.

@noobzkillor
Ja das stimmt schon, nur soll der Webserver einige bestimmte Dinge beherschen, z.B. in bestimmten Sittuationen auf eine bestimmte Datenbank zugreifen usw. Ich glaube nicht dass es einen Webserver gibt, der alle nötigen Anforderungen erfüllt.
Mein einziges Problem ist ja, dass die HTML-Seiten nicht richtig angezeigt werden.
 
S.Kara schrieb:
in bestimmten Sittuationen auf eine bestimmte Datenbank zugreifen usw. Ich glaube nicht dass es einen Webserver gibt, der alle nötigen Anforderungen erfüllt.

Da hast du recht. Ein klassischer Webserver kann das auch nicht. Dafür gibt dann die Skriptsprachen wie php oder eben eine "richtige" wie Java. Dennoch bin ich der Überzeugung, dass es einfacher geht. Wenn es unbedingt java sein muss, dann kopiere doch einfach was aus dem Internet oder nutze einen von denen
 
NanoHttpd sieht ganz gut aus, ich denke den werde ich benutzen.
Danke für eure Hilfe. :)
 
Oder du benutzt einfach JavaEE auf 'nem Glassfish oder Wildfly. Oder falls kein EE erwünscht ist, eben das Spring Framework benutzen z.B. mit Tomcat.
Beide Systeme erschlagen all deine Anforderungen mit links. Und das beste: Sie funktionieren problemlos und setzen natürlich alle nötigen Header automatisch ;)
 
Ja das hätte man vielleicht auch nehmen können. :)

NanoHttpd hat auch gut funktioniert, war nur etwas Oversized. Dafür habe ich meinen Fehler gefunden. Mein ursprünglicher Webserver funktioniert jetzt, nachdem ich die folgenden Zeilen hinzugefügt habe:
Code:
writer.println("HTTP/1.0 200 OK");
writer.println("Content-Type: text/html; charset=ISO-8859-1");

Anscheinend lag es am fehlenden charset.
Danke nochmal an alle für die Hilfe. :)
 
Zurück
Oben