Ich lerne den Code aus dem ersten Beispiel von.Was ist die dritte Anfrage, von der serversockt akzeptiert?
hier ist die index.html
<html>
<head>
<title>Welcome to BrainySoftware</title>
</head>
<body>
<img src="./images/logo.gif">
<br>
Welcome to BrainySoftware.
</body>
</html>
Ich weiß, es 2 GET-Anforderung ist. Zuerst ist der HTML, der zweite ist der IMG. Aber ich bekomme manchmal die dritte Anfrage. Die dritte Anfrage ist leer, ich kann nichts von der Anfrage bekommen.
ServerSocket serverSocket = null;
int port = 8080;
try {
serverSocket = new ServerSocket(port, 1, InetAddress.getByName("127.0.0.1"));
}
catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
while (!shutdown) {
Socket socket = null;
InputStream input = null;
OutputStream output = null;
try {
socket = serverSocket.accept();
input = socket.getInputStream();
output = socket.getOutputStream();
// create Request object and parse
Request request = new Request(input);
request.parse();
// create Response object
Response response = new Response(output);
response.setRequest(request);
response.sendStaticResource();
// Close the socket
socket.close();
//check if the previous URI is a shutdown command
shutdown = request.getUri().equals(SHUTDOWN_COMMAND);
}
catch (Exception e) {
e.printStackTrace();
continue;
}
}
Wenn die dritte Anfrage kommt, sendStaticResource
die Methode eine Ausnahme werfen: java.lang.NullPointerException because request.getUri() is null.
Meine jdk Version ist 1.7, wenn ich die InetAddress 127.0.0.1
-192.168.50.132
ändern, verschwand die dritte Anfrage. Ich habe keine Ahnung, warum nicht 2 Anfragen, bitte helfen Sie mir.
Haben Sie versucht, einen Breakpoint in einem Debugger zu setzen und zu überprüfen, was kommt? Es könnte ein HEAD anstelle einer GET-Anfrage sein, wobei nach den Fähigkeiten des Servers oder nach anderen Eigenschaften einer Datei gesucht wird - z. die "letzte Änderungszeit". –
Ja, ich habe versucht.Es hat Anfrage 3 mal: ①GET /index.html HTTP/1.1 ② "" ③GET /images/logo.gif HTTP/1.1 –
@TomEast Ich bezweifle, es könnte einige sein [Browser Prefetching] (https : //developers.google.com/speed/articles/prefetching) Optimierung, die zu einer zusätzlichen Anforderung führt. Was ist der Browser, den Sie verwenden? Kannst du es mit einem anderen Browser versuchen? –