據我所知,Java Servlets同時處理多個請求,並且我通過StackOverflow和Google進行了搜索,並確認了我的想法。不過,我現在很困惑,我寫了一個簡單的servlet,似乎顯示阻止行爲。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上做了同樣的事情,它也做了同樣的事情。
任何指針?
謝謝
您的瀏覽器可能會將請求序列化,如果您從2臺不同的計算機或2種不同的瀏覽器嘗試此操作,會發生什麼情況? (即iexploere和firefox)您還可以檢查http訪問日誌,以查看請求是否同時到達您的servlet容器。 – rsp
你可以顯示'web.xml'和(假設這是tomcat)'server.xml'。 – beny23
@beny:我不確定這將有助於理解問題的原因。你能詳細說明嗎? – BalusC