Avatar ·

Servlet的工作原理:创建、会话、共享变量与多线程

```html 大家好!我刚开始学习Java EE和Сервлеты,脑子里一团浆糊。我写了一个简单的Сервлет用来统计页面访问次数,但它表现得很奇怪。这是我的代码: ```java @WebServlet("/counter") public class CounterServlet extends HttpServlet { private int counter = 0; // 实例变量 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { counter++; resp.getWriter().println("Visits: " + counter); } } ``` 当我在浏览器的两个不同标签页中打开页面时,计数器莫名其妙地一次增加了2甚至更多。我原以为每个用户都会创建自己的Сервлет实例,但看起来并非如此。 另外我不明白: 1. Сервлет究竟何时创建?是在启动时一次创建,还是每次请求都创建? 2. 会话(Session)是如何工作的?我想为每个用户单独统计访问次数。 3. 如果Сервлет是 ```