我编写了一个简单的Java Server编程,只接受连接并在屏幕上打印“发送响应”。当我使用safari连接此服务器时,服务器会打印一次结果,这是正确的结果。但是,当我重新加载页面时,将有三个“发送响应”打印到屏幕上。任何人都可以帮助我吗?
public class Server {
public void runServer() throws Exception{
ServerSocket socketServer = new ServerSocket(3721);
System.out.println("Listerning for connections on port:"+socketServer.getLocalPort());
while(true){
Socket socket = socketServer.accept();
System.err.println("Established with:"+socket);
String request = parseRequest(socket);
String response = createResponse(request);
sendResponse(response);
socket.close();
}
}
public String parseRequest(Socket socket){
return "request";
}
public String createResponse(String request){
return "response";
}
public void sendResponse(String response){
System.out.println("Sending response");
}
public static void main(String[] args) throws Exception{
Server server = new Server();
server.runServer();
}
}
输出结果为:
Listerning for connections on port:3721
Sending response
Established with:Socket[addr=/0:0:0:0:0:0:0:1%0,port=59055,localport=3721]
Sending response
Established with:Socket[addr=/0:0:0:0:0:0:0:1%0,port=59065,localport=3721]
Established with:Socket[addr=/0:0:0:0:0:0:0:1%0,port=59066,localport=3721]
Sending response
Sending response
Established with:Socket[addr=/0:0:0:0:0:0:0:1%0,port=59067,localport=3721]
答案 0 :(得分:1)
当你在Safari中为页面创建请求时,Safari可能会尝试在后台获取其他项目,这是servlet正在接收的。
一个明显的例子是网站旁边显示的图标和书签中的图标。
您应该打印出请求中的URI路径,以确切了解请求的内容。您可以使用该路径从“无效”请求中过滤掉“有效”请求。