0
是否可以拒絕對我的servlet的請求或不響應它?假如我在100毫秒內在同一個線程上收到2個請求,我可以完全忽略第二個請求嗎?或者是否可以中止第一個請求並僅處理第二個請求?幾乎同時HTTPServletRequests
是否可以拒絕對我的servlet的請求或不響應它?假如我在100毫秒內在同一個線程上收到2個請求,我可以完全忽略第二個請求嗎?或者是否可以中止第一個請求並僅處理第二個請求?幾乎同時HTTPServletRequests
要拒絕後續請求,您需要在第一個時間段內記錄您願意處理的第一個請求的時間(對於任何請求返回錯誤的響應,而不是響應等)。 如:
private static final Object LOCK_OBJECT = new Object();
private static long lastAokTime;
private static final long MIN_REQUEST_TIME_MILLIS = 100L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
{
synchronized(LOCK_OBJECT) {
final long now = System.currentTimeMillis();
if (lastAokTime == 0 || (now - lastAokTime < MIN_REQUEST_TIME_MILLIS)) {
// reject the request
response.setStatus(500); // perhaps?
return;
} else {
lastAokTime = now;
}
// carry on and process request
}
}
線程是有趣的,但你真的希望它的每線程或者你想把它當作一個全球性的屬性(應用服務器做了不少幕後工作線程的幫助你)?上面的示例是全局的,但如果要將其鎖定到線程,則可以使用ThreadLocal對象替換LOCK_OBJECT。
祝你好運。