2017-12-15 12 views
0

リクエストがあったときにブラウザにHTMLファイルを送信したい場合、問題なくHTMLをブラウザに送信できます。私は、HTMLにCSSを適用しようとしていますが、Chromeは私にエラーを与えている:Javaソケット - HTMLがCSSとして解釈されています

Resource interpreted as Stylesheet but transferred with MIME type text/html 

私はそれがindex.htmlmain.cssの両方を示しているChromeでソース]タブに移動しますが、彼らは両方のindex.htmlの内容を持っているときはいつでも。 main.cssはスタイルシートリンクとして追加されましたindex.html

私は何とかCSSをブラウザとHTMLに送信しなければならないと仮定していますか?現時点で

これは私が使用しているJavaコードです:

String webPageContents = null; 
    BufferedReader webpage = new BufferedReader(new FileReader("data/index.html")); 
    while ((webPageContents = webpage.readLine()) != null) { 
     String httpResponse = "HTTP/1.1 200 OK\r\n\r\n" + webPageContents; 
     socket.getOutputStream().write(httpResponse.getBytes("UTF-8")); 
    } 

EDIT:

final ServerSocket server = new ServerSocket(8080); 
    System.out.println("Listening on 8080"); 
    while (true) { 
     try (Socket socket = server.accept()) { 
      socket.getOutputStream().write(sendFiles(socket, "index.html", "html;").getBytes("UTF-8")); 
      socket.getOutputStream().write(sendFiles(socket, "main.css", "css;").getBytes("UTF-8")); 
     } 
    } 
} 

private static String sendFiles(Socket socket, String fileName, String memeType) throws IOException { 
    String webPageContents = null; 
    BufferedReader webpage = new BufferedReader(new FileReader("data/" + fileName)); 
    String httpResponse = null; 
    while ((webPageContents = webpage.readLine()) != null) { 
     httpResponse = "HTTP/1.1 200 OK Content-Type:text/" + memeType +"\r\n\r\n" + webPageContents; 
    } 
    return httpResponse; 
} 

を私がように私のコードを変更したAdninの答えを1としてしかし、HTMLページにスタイルを適用して表示する代わりに、CSSをブラウザに表示しています。

+1

ブラウザはcssを単独でダウンロードすることができます。そのリクエストの処理方法を確認する必要があります。 –

答えて

1

ブラウザは、受信したデータの種類を認識するために 'Content-Type'レスポンスヘッダーを使用します。多くのMIMEタイプ(画像、音声、テキスト、アプリケーションデータ用)があります。あなたは、ここで詳細を読むことができます:https://en.wikipedia.org/wiki/Media_type

あなたはレスポンスヘッダを追加する必要があります:CSSファイル応答にHTMLページの応答

Content-Type:text/css; 

Content-Type:text/html; 

問題が解決するはずです。

+0

だから、私はCSSファイルとHTMLファイルのそれぞれのContent-Typesでそのコードブロックを本質的に複製しなければならないでしょうか? – Colin747

+0

このコードを関数に展開し、filenameとcontent-typeヘッダーを関数paramsとして受け取ることができます。その場合、複製する必要はありません。 – mroman

+0

これは、HTMLに適用するのではなく、CSSを印刷しているので、新しいコードで質問を更新しました。 – Colin747

関連する問題