尝试从头开始构建Web服务器。它适用于html和其他纯文本文件。在Firefox和Chrome中测试过。但我很难让图像正常显示。状态200返回,在Firefox中我根据请求获得附加图像。除了响应头之外,我是否需要以不同的方式处理图像文件类型?
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返回。答案 0 :(得分:0)
我想我可以看到一个错误:
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");
}
}
这说明: