有什麼方法可以阻止新的客戶端請求到servlet,直到舊的客戶端請求在servlet中完成執行爲止?我不想使用關鍵字,而是我想識別servlet中的每個請求線程。我怎樣才能做到這一點?識別Servlet中的每個請求線程
回答
乍一看,我猜應該可以在上下文中存儲一個bool。 任何到達的請求都會檢查context-bool(讓我們將其命名爲「bBusy」)。 第一個到達的請求設置它,並在處理它時重置它。 第二個到達的人檢查:如果第一個人仍在處理,它將被識別,然後它是由你的幻想會發生什麼... :)
我希望這是你在想什麼?編輯: 它必須是正確的上下文。我的Servlet時間在很久以前...我猜ApplicationContext? - 不確定,但你應該能夠自己找到它。
在servlet或過濾器中使用synchronized關鍵字。在servlet方法,你可以寫:
synchronized(this) { //code handling the request that will be executed //by only one thread/request at a time }
您可以使用一個對象,會爲你(根據您的需要)提供同步 - 見java.util.concurrent中
你可以嘗試使用不使用原語的線程同步算法。 (CS類通常會告訴這樣的算法)
您可以嘗試配置您的服務器以順序執行請求。 參見http://tomcat.apache.org/tomcat-6.0-doc/config/executor.html
@Tahani寫道:「請做\ [no \] t要求我使用同步關鍵字」;) – Fildor
保持一個的AtomicBoolean /在ServletContext揮發性以同步塊可以達到的效果。另一種方法是使用SingleThreadModel接口(不建議使用),但它仍然會執行作業。
我仍然想知道爲什麼你想這樣做。
您可以在Web應用程序代碼(servlet等)中使用斷言。但請確保Web /應用程序服務器使用控制斷言的-ea或相應參數啓動。
我怎樣才能確保服務器啓動與控制斷言的-ea或相應的參數。 – Tahani
對於大多數服務器來說,它是啓動服務器時命令行的一部分。請參閱此鏈接以及http://www.coderanch.com/t/82690/Tomcat/enable-JDK-assertions-Tomcat –
- 1. servlet的每個實例與servlet中每個servlet的線程之間的區別?
- 2. JSP/Servlet如何識別HTTP請求是否來自ajax請求
- 3. 識別請求
- 4. Netty:每個請求一個線程
- 5. 從Servlet請求產生線程
- 6. 訪問從一個線程請求對象一個servlet
- 7. 每個請求發送Cookie來識別用戶?
- 8. GWT servlet過濾器,如何識別特殊服務請求?
- 9. 識別Python中的線程
- 10. 是否爲servlet處理的整個請求保證線程?
- 11. 如何識別ajax請求?
- 12. ngMock無法識別請求
- 13. 多線程客戶端中的每個請求的ssl握手
- 14. 線程每請求TCP服務器
- 15. 在Fiddler JavaScript中識別POST請求
- 16. servlet中的多個客戶端請求
- 17. 在jmeter線程組中調度每個請求
- 18. 多個請求處理servlet
- 19. Servlet請求
- 20. tomcat請求servlet
- 21. 請求和servlet
- 22. 從請求中識別應用程序池的名稱
- 23. ASIHTTPRequest如何識別完成的請求和失敗的請求?
- 24. 設計問題 - 在servlet的異步請求的線程安全
- 25. 似乎只有一個線程處理Servlet中的所有請求
- 26. DropletInvoker.invokeDroplet無法識別的請求參數
- 27. #標籤的URL請求無法識別
- 28. 識別DNS請求的PID源(Windows XP)
- 29. 識別用戶發起的web請求
- 30. Tomcat - 每個請求一個線程 - 或其他選擇?
我很難理解這個需求。你真的**想要在整個應用程序範圍內將servlet的使用限制爲1個併發請求嗎?或者您是否想在會話範圍內限制爲1個請求? (即每個瀏覽器會話1個同時請求)?無論如何,**爲什麼**?你的servlet不是線程安全的嗎?或者它是一項長期運行的工作,在完成之前不應該重新執行? – BalusC
親愛的BalusC,我想要的是:,我如何識別每個線程來到我的servlet?並按照我喜歡的方式管理它們 – Tahani
是的,我明白你在「如何實現這個解決方案?」中要求的*,但我不明白你真正需要的東西*,例如「什麼是合適的這個解決方案?「。功能要求完全不清楚。我不想發表如何實現完全錯誤解決方案的答案。 – BalusC