0

是否可以拒绝对我的 servlet 的请求或不响应?假设我在同一个线程上在 100 毫秒内收到 2 个请求,我可以完全忽略第二个吗?或者是否可以中止第一个请求而只处理第二个?

4

1 回答 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 回答