Ich hosste eine Webseite von zu Hause aus. Ich habe meinen eigenen HTTP-Server mit Java erstellt. Dies ist ein SSCCE:Java HTTP Server funktioniert nicht
if(command.startsWith("GET"))
{
//client is a socket on which I reply.
PrintWriter pw = new PrintWriter(client.getOutputStream(), true);
String commule = command.split(" ");
if(commule[0].equals("GET"))
{
if(commule[1].contains("."))
{
File file = new File(GEQO_SERVER_ROOT + commule[1].substring(1).replaceAll("%20", " "));
if(file.exists())
{
OutputStream out = client.getOutputStream();
InputStream stream = new FileInputStream(file);
String response = new String();
response += "HTTP/1.1 200 OK\r\n";
response += "Date: Thu, 08 Aug 2013 08:49:37 GMT\r\n";
response += "Content-Type: text/html\r\n";
response += "Content-Length: " + file.length() + "\r\n";
response += "Connection: keep-alive\r\n";
response += "\r\n";
pw.write(response); //Assume I already initialized pw as a PrintWriter
pw.flush();
copy(stream, out);
stream.close();
out.close();
}
else
{
pw.write("<html><h1>The request 404ed.</h1>");
pw.write("<body>The requested URL <b>" + commule[1] + "</b> could not be found on this server.</body></html>");
pw.flush();
}
}
else
{
BufferedReader br = new BufferedReader(new FileReader(GEQO_SERVER_ROOT + commule[1].substring(1) + "main.html"));
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null)
{
pw.print(sCurrentLine);
}
br.close();
}
}
else
{
pw.println("Unrecognized HTTP command.");
}
}
Dies ist die main.html Quelle:
<html>
<title>Geqo Server</title>
<body>Geqo server online and functioning!</body>
</html>
Das Problem ist, dass wenn ich versuche, auf diese Seite zuzugreifen unter Verwendung von Chrome, es wird korrekt angezeigt (zumindest bei Verwendung von 127.0.0.1). Aber als ich versuchte, auf Firefox auf 127.0.0.1 zuzugreifen, funktioniert es, aber gibt mir nur die HTML-Quelle. IE gibt mir auch nur die Quelle. Kann mir jemand sagen, warum Firefox und IE nur die Quelle anzeigen, anstatt es zu analysieren?
Ich denke, das enthält einige Hinweise (Firebug Screenshot):
Meine Quelle in einem <pre>
Tag kommt zu sein scheint. Ich weiß nicht warum, aber ist das nicht das Problem?
Ich Port-weitergeleitet. Hier ist die Seite Jungs: http://110.172.170.83:17416/
(Sorry, Stackoverflow erlaubt keine numerischen Verknüpfungen.)
EDIT: Ich habe das Problem gefunden. Aber bevor ich das erkläre, danke an Bart für den SSCCE, den ich mit meinem Code verglichen habe. Das ist das Problem: Die if
Anweisung in der achten Zeile if(commule[1].contains("."))
bewirkt, dass der Code den Großteil des Codes hier überspringt. In diesem entsprechenden else
Block gibt es sogar keinen Befehl zum Senden der Header. Danke an artbristol für das hinweisend.
Vielen Dank im Voraus.
scheint in Ordnung zu sein. Könnte sein, dass die Header auf Ihrer Betriebssystem-Plattform nicht korrekt sind, wie für '\ r \ n' und Chrome macht einige Annahmen. – PeterMmm
Ich denke nicht. Ich bin auf Windows 7 und außerdem funktioniert es in Chrome. – Hele
Mit Firebug in Firefox ist der Inhaltstyp, den die Antwort für google.com hat, 'text/html; charset = UTF-8', versuchen Sie, den Zeichensatz hinzuzufügen, nur um zu sehen, was passiert – morgano