[英]Building an HTTP Response Header
嘗試從頭開始構建Web服務器。 它適用於html和其他純文本文件。 在Firefox和Chrome中進行了測試。 但是我很難使圖像正確顯示。 返回狀態200,在Firefox中,我可以根據要求獲取附件圖像。 除了響應頭之外,我是否需要使用printstream來不同地處理圖像文件類型?
FileInputStream fileIn = new FileInputStream("test/" +
file);
// split specified file path
String[] pathTokens = tokens[1].split("/|\\.");
String fileExt = pathTokens[tokens.length - 1];
// build response
out.println("HTTP/1.1 200 OK");
if(fileExt.equals("jpg") || fileExt.equals("jpeg") ||fileExt.equals("png") ||
fileExt.equals("ico"))
out.println("Content type: image/" + fileExt);
else
out.print("Content type: text/");
if(fileExt.equals("html"))
out.println(fileExt);
else
out.println("plain");
long size = fileIn.getChannel().size();
out.println("Content-Length: " + Long.toString(size));
out.println("Connect: Close");
out.println("");
int read = 0;
byte[] buffer = new byte[1024];
while ((read = fileIn.read(buffer)) != -1){
out.write(buffer, 0, read);
}
如果需要任何其他信息,請提出要求。 我非常願意提供任何其他詳細信息,或盡可能回答任何問題。
編輯:經過進一步檢查,我實際上是在Firefox中獲取404,但我不太確定Chrome是什么,顯示的頁面是“無法訪問此站點...”,但看來我要返回200。
我想我可以看到一個錯誤:
if(fileExt.equals("jpg") || fileExt.equals("jpeg") ||fileExt.equals("png") ||
fileExt.equals("ico"))
out.println("Content type: image/" + fileExt);
else
out.print("Content type: text/");
if(fileExt.equals("html"))
out.println(fileExt);
else
out.println("plain");
如果我重新縮進並在Java編譯器認為應該的位置插入{}。
if (fileExt.equals("jpg") || fileExt.equals("jpeg") ||
fileExt.equals("png") || fileExt.equals("ico")) {
out.println("Content type: image/" + fileExt);
} else {
out.print("Content type: text/");
}
if (fileExt.equals("html")) {
out.println(fileExt);
} else {
out.println("plain");
}
看到問題了嗎? 如果擴展名是(例如)“ jpg”,則將在標題中添加一條虛假的“普通”行。
我認為您實際上是想寫這樣的:
if (fileExt.equals("jpg") || fileExt.equals("jpeg") ||
fileExt.equals("png") || fileExt.equals("ico")) {
out.println("Content type: image/" + fileExt);
} else {
out.print("Content type: text/");
if (fileExt.equals("html")) {
out.println(fileExt);
} else {
out.println("plain");
}
}
這說明了:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.