Java lokaler WebServer - HTML funktioniert nicht

S.Kara

Lt. Commander
Dabei seit
Okt. 2013
Beiträge
1.693
[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:

damokles2k

Cadet 4th Year
Dabei seit
Nov. 2006
Beiträge
106
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
 

nbzklr

Ensign
Dabei seit
Okt. 2009
Beiträge
186
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?
 

S.Kara

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.693
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.
 

SaxnPaule

Commodore
Dabei seit
Okt. 2010
Beiträge
4.261
Schau dir mal das Response Objekt mit dem FireBug an. Werden die Header Parameter richtig interpretiert?
 

nbzklr

Ensign
Dabei seit
Okt. 2009
Beiträge
186
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:

S.Kara

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.693
@ 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.
 

nbzklr

Ensign
Dabei seit
Okt. 2009
Beiträge
186
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
 

S.Kara

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.693
NanoHttpd sieht ganz gut aus, ich denke den werde ich benutzen.
Danke für eure Hilfe. :)
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
8.883
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 ;)
 

S.Kara

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.693
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. :)
 
Top