据我所知,Java Servlet 正在同时处理多个请求,并且我已经通过 StackOverflow 和 Google 进行了搜索,并证实了我的想法。但是我很困惑,对吧...
据我所知,Java Servlet 可以同时处理多个请求,我已经搜索了 StackOverflow 和 Google,并证实了我的想法。但是我现在很困惑,我编写了一个简单的 servlet,似乎表现出阻塞行为。
所以我有一个简单的 Servlet:
public class MyServlet extends HttpServlet
{
private static final long serialVersionUID = 2628320200587071622L;
private static final Logger logger = Logger.getLogger(MyServlet.class);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
logger.info("[doGet] Test before");
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
logger.info("[doGet] Test after");
resp.setContentType("text/plain");
resp.getWriter().write("OK");
}
}
然后我同时打开了 2 个浏览器窗口,它们都访问了我的 Servlet。结果是第一个请求阻塞了第二个请求。日志还显示:
10:49:05,088 [http-8383-Processor14] INFO MyServlet - [doGet] Test before
10:50:05,096 [http-8383-Processor14] INFO MyServlet - [doGet] Test after
10:50:05,106 [http-8383-Processor22] INFO MyServlet - [doGet] Test before
10:51:05,112 [http-8383-Processor22] INFO MyServlet - [doGet] Test after
我感觉好像漏掉了什么……Servlet 应该能够处理并发请求,但它似乎没有这样做。我也对服务方法(而不是 doGet)做了与上述相同的操作,它做了同样的事情。
有什么指点吗?
谢谢