我正在学习这本书 tomcat的工作方式并找到让我大吃一惊的东西。我简化了如下代码:
public class Boot {
public static void main(String[] args) {
ServerDemo server = new ServerDemo();
try {
server.start();
System.in.read();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
public class ServerDemo implements Runnable {
private ServerSocket serverSocket = null;
public void run() {
while (true) {
Socket socket = null;
try {
socket = serverSocket.accept();
System.out.println("--receive request from client----"+
Thread.currentThread().getId());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void start() {
try {
serverSocket = new ServerSocket(8080);
Thread thread = new Thread(this);
thread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Boot
类是 Main class 并用于启动此应用程序,ServerDemo
类是一个简化的服务器,可以监听 8080 端口和将在浏览器的请求到达时打印信息。
现在问题是:我认为当我从浏览器发出请求时会执行
socket = serverSocket.accept();
然后打印信息仅一次,然后由于accept method
等待下一个请求而自行阻止线程。
但真实的是线程打印信息几次:(可能3,4 ..)关于请求。
这是一个执行: 输入:
http://localhost:8080/index
输出:
--receive request from client----13
--receive request from client----13
--receive request from client----13
我的预期输出:
- 接收来自客户的请求----号码
摘要:我无法弄清楚一个请求为什么打印几次,这意味着接受方法执行多次。
答案 0 :(得分:0)
您的浏览器可能尝试了一些其他操作来使您响应,这是因为您刚刚关闭了它们的连接。尝试改用curl
或wget
。
–ug _