關於Servlet的併發響應
阿新 • • 發佈:2018-12-21
Servlet的生命週期是這個Servlet被訪問時構造,專案被Remove部署時才終止…
那麼我們現在再來看看,當多個使用者以doget/dopost方式同時訪問同一個Servlet時,那個響應情況是怎麼的呢??是一個一個來執行?還是多執行緒並行來執行呢??
1: 新建web Project
2:新建檔案: Servlet_MutiThreads.java
package myServlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet_MutiThreads extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(Thread.currentThread().getName() + " is running"); try { Thread.sleep(10*1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " is ------------finished"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }
3.XML加入:
<servlet> <servlet-name>Servlet_MutiThreads</servlet-name> <servlet-class>myServlet.Servlet_MutiThreads</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet_MutiThreads</servlet-name> <url-pattern>/myServlet/Servlet_MutiThreads</url-pattern> </servlet-mapping>
那麼這個servlet的訪問的url是: http://localhost:8080/Servlet_MutiThreads//myServlet/Servlet_MutiThreads
這個Servlet裡,每次訪問都sleep 10s,就是說每個訪問的持續時間為10s….(這裡為不什麼不用wait呢? 是因為sleep時,儘管執行緒休眠了,但還是不會釋放鎖的,而這正是我們想要的,而wait是會釋放的)
我們有在位址列裡多次訪問這個URL(連續按多次enter):
我們可以看到,這個訪問是併發的,並Servlet的響應也是併發的,檢視資料:
Servlet體系結構是建立在Java多執行緒機制之上的,它的生命週期是由Web容器負責的。
當客戶端第一次請求某個Servlet時,Servlet 容器將會根據web.xml配置檔案例項化這個Servlet類。當有新的客戶端請求該Servlet時,一般不會再例項化該Servlet類,也就是有多個執行緒在使用這個例項。
Servlet容器會自動使用執行緒池等技術來支援系統的執行
我們就驗證了Servlet能併發響應多個使用者的訪問
原文:https://blog.csdn.net/irelandken/article/details/6935659