用chrome等浏览器访问这个简单的helloworld网页会有一次Response Error
Topic source问:请问为什么添加了图片之后,网页上不会显示任何图标呢?
答:你在浏览器里面收藏一下这个网址,然后去收藏夹看你收藏的这个网址,就能看到这个图片了。另外,你再仔细想想,即使浏览器拿到了图片,由于你的html里面没有写展示图片的代码,浏览器也不知道要给你展示到页面的哪个位置啊。浏览器只会展示html里面的内容,你html里面没有写展示图片的代码,当然不会显示了。
问:以及为什么浏览器会自动请求一个图标呢?
答:这是浏览器自己发出的请求,浏览器请求这个图标是为了,用户收藏这个网址的时候,在收藏夹里面显示这个网址的logo。favicon,即Favorites Icon的缩写,是其可以让浏览器的收藏夹中除显示相应的标题外,还以图标的方式区别不同的网站。你会发现有时候接到的是对于favico.ico的请求,而自己从来没有作出这个请求。这与浏览器的机制有关。 浏览器会在适当的时候(什么是适当时候,要看不同浏览器的机制),自动的向服务器发出这样的图片请求。当正常接收到图片后,用户收藏这个网站的网页时,就会在收藏夹显示相应的图片。
case 2:
//readAllBytes这个方法jdk8没有,可以换成下面的代码。
//byte[] b = Test.class.getResourceAsStream("/favicon.png").readAllBytes(); //把图片放在src或者bin目录下
InputStream ins = Test.class.getResourceAsStream("/favicon.png");//把图片放在bin下
byte[] b = new byte[1024];
int res = 0;
ByteArrayOutputStream outputByte = new ByteArrayOutputStream();
while((res = ins.read(b)) != -1) {
outputByte.write(b, 0, res);//将字节读取到字节内存流中outputByte
}
byte[] faviconByteArr =outputByte.toByteArray();//将读取到的字节转换成byte数组
outputByte.close();
ins.close();
writer.write("HTTP/1.0 200 OK\r\n");
writer.write("Connection: close\r\n");
writer.write("Content-Type: image/x-icon\r\n");
writer.write("Content-Length: " + faviconByteArr.length +"\r\n");
writer.write("\r\n");//空行标识Header和Body的分隔
writer.flush();
System.out.println("长度是多少:" + faviconByteArr.length);
output.write(faviconByteArr, 0, faviconByteArr.length);;
output.flush();
break;
SNH48-刘慈欣 ,你有微博或者公众号吗?想follow你,交个朋友。
- 1
SNH48-刘慈欣
其实是浏览器对网站图标
/favicon.ico
的请求失败了把代码改成
并把图片放进项目文件夹下,就可以使浏览器正确获取图标