Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构建HTTP响应头_Java_Http_Httpresponse_Printstream - Fatal编程技术网

Java 构建HTTP响应头

Java 构建HTTP响应头,java,http,httpresponse,printstream,Java,Http,Httpresponse,Printstream,正在尝试从头开始构建web服务器。它适用于html和其他纯文本文件。在Firefox和Chrome中测试。但我很难让图像正确显示。返回状态200,在Firefox中,我根据请求获得附加图像。除了响应头之外,我是否需要使用printstream以不同的方式处理图像文件类型 如果需要任何进一步的信息,请询问。我非常愿意提供任何额外的细节,或者回答任何我能回答的问题 编辑:进一步检查后,我在Firefox中得到了404,我不确定Chrome是什么,显示的页面是“无法访问此站点…”,但似乎我得到了20

正在尝试从头开始构建web服务器。它适用于html和其他纯文本文件。在Firefox和Chrome中测试。但我很难让图像正确显示。返回状态200,在Firefox中,我根据请求获得附加图像。除了响应头之外,我是否需要使用printstream以不同的方式处理图像文件类型

如果需要任何进一步的信息,请询问。我非常愿意提供任何额外的细节,或者回答任何我能回答的问题


编辑:进一步检查后,我在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”,您将在标题中添加一个虚假的“普通”行

我想你真的想写这个:

这说明:

  • 让代码缩进与代码实际所说内容相匹配的重要性。(提示:使用IDE的自动缩进功能!)
  • 您应该养成在所有控件构造中始终使用花括号块的习惯
  • 重新发明轮子不是一个好主意。除非你喜欢修理坏了的轮子

  • if(fileExt.equals(“html”))
    应该是
    else if(fileExt.equals(“html”)
    (或者一些如何附加到以前的
    else
    …基本上,使用大括号)。还有,你为什么要这样做?行终止符应该是
    \r\n
    ,而不是
    println()
    给你的任何东西。@ElliottFrisch抱歉前面的先发制人的评论。你的想法是对的,那是个问题。我的问题的另一半没有显示在所选代码中。@EJP当时可能都可以接受,因为我目前正在使用它,而且我没有使用
    \r\n
    。接受什么并不重要。重要的是什么是对的。RFC的理念是“发送的内容要保守,接受的内容要自由”。因此,你应该只发送正确的。这是正确的,上面已经提到过。谢谢你的回复。因此,任何好奇的人都很清楚。将来,如果你从评论中得到答案,最好删除这个问题。。。。。
    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");
    }
    
    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");
        }
    }