是否可以拒绝对我的 servlet 的请求或不响应?假设我在同一个线程上在 100 毫秒内收到 2 个请求,我可以完全忽略第二个吗?或者是否可以中止第一个请求而只处理第二个?
问问题
51 次
1 回答
0
要拒绝后续请求,您需要记录您愿意处理的第一个请求的时间(返回错误响应、不响应等),以便在第一个请求的一段时间内处理任何请求。例如:
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
}
}
线程很有趣,但是你真的想要它每个线程还是你想要它作为一个全局属性(应用服务器在幕后做了相当多的线程工作来帮助你)?上面的示例是全局的,但是如果您想将 LOCK_OBJECT 锁定到一个线程,您可以将其替换为 ThreadLocal 对象。
祝你好运。
于 2012-09-11T05:24:25.437 回答