效果圖如下:
前端發送一次請求,後端接收到兩次,第二次是:GET /favicon.ico HTTP/1.1
可以看到頁簽上标題欄前面是個地球,這個是預設的。
原因就是背景給的響應裡沒有指定這個圖示,他再請求一次,就是請求這個資源。
解決方法,在響應裡加上這個元素,指定下圖示内容:<link rel="shortcut icon" href="https://g.csdnimg.cn/static/logo/favicon32.ico" type="image/x-icon" />
其中 https://g.csdnimg.cn/static/logo/favicon32.ico
這個是 csdn 網站上的圖示,具體的可以自己來指定。
修改後再次測試:
可以看到隻有一次請求了,而且頁簽前面也有圖示了。 測試代碼如下:package com.test.test;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketTest {
public static void main(String[] args) throws IOException {
/*
作用:接收浏覽器的請求并響應
*/
// 建立服務,端口設定為10010
ServerSocket server = new ServerSocket(10010);
int k = 0;
while(true) {
// 阻塞式連接配接,當接收請求前保持阻塞
Socket socket_client = server.accept();
// 擷取輸入流
InputStream in_put = socket_client.getInputStream();
// 制作響應封包
StringBuffer response = new StringBuffer();
// 讀取請求内容
BufferedReader input = new BufferedReader(new InputStreamReader(in_put,"GBK"));
String url = input.readLine();
if(url != null) {
String url_new = java.net.URLDecoder.decode(url, "UTF-8");
k = k + 1;
System.out.println("\n循環次數:" + k);
System.out.println(url_new);
}
// 響應頭部
String response_head = "HTTP/1.1 200 OK\r\n" +
"Content-type:text/html\r\n\r\n";
// 響應主體
String response_body = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">" + // 解決亂碼問題
"<link rel=\"shortcut icon\" href=\"https://g.csdnimg.cn/static/logo/favicon32.ico\" type=\"image/x-icon\" />" +
"<style>body{font-family:\"黑體\"}</style>" +
"歡迎來到小藍棗的部落格<br>" +
"Welcome to xiaolanzao's blog!";
response.append(response_head + response_body);
// 擷取輸出流
OutputStream out_put = socket_client.getOutputStream();
// 将響應資料傳給輸出流
out_put.write(response.toString().getBytes());
// 關閉建立的對象
out_put.close();
in_put.close();
socket_client.close();
}
}
}
喜歡的點個贊❤吧!