تم استدعاء Tomcat doFilter()‎ مع الاستجابة الملتزم بها

StackOverflow https://stackoverflow.com/questions/45361

  •  09-06-2019
  •  | 
  •  

سؤال

لدي مرشح Tomcat الذي يقوم بتفويض الطلبات إلى كائن المعالجة اعتمادًا على عنوان URL.هذا هو المرشح الوحيد في FilterChain.لدي تطبيق Ajax الذي يطرق هذا الفلتر بالكثير من الطلبات.

لقد لاحظت مؤخرًا مشكلة تتعلق بالفلتر doFilter غالبًا ما يتم استدعاء الطريقة باستجابة ملتزمة كمعلمة (داخليًا، يتم وضع علامة ملتزمة على استجابة الذئب).

يبدو لي أن الطريقة الوحيدة التي يمكن أن يحدث بها هذا هي إذا recycle() لم يتم استدعاء الأسلوب على استجابة ذئب البراري هذه.لقد قمت بالتحقق للتأكد من أنني لا أحتفظ بمراجع لأي من كائنات الطلب أو الاستجابة أو OutputStream أو الكاتب.بالإضافة إلى ذلك، تأكدت من إغلاق OutputStream في كتلة نهائية.ومع ذلك، هذا لا يحل هذه المشكلة.

يبدو هذا وكأنني أفعل شيئًا ما لإساءة استخدام حاوية servlet ولكني أواجه مشكلة في تعقبها.

هل كانت مفيدة؟

المحلول

لقد حاولت استخدام Tomcat 6.16 و6.18.وهذا بالتأكيد هو الفلتر الوحيد في السلسلة.

يبدو أن شيئًا ما يحتفظ بمرجع إلى servletoutputStream.لقد قمت بتغليف ServletOutputStream في OutputStream الخاص بي ثم تأكدت من تدمير المرجع.أدى هذا إلى حل المشكلة بحيث لم أعد أرى استجابة ملتزمة.

هذا هو أحد الآثار الجانبية الغريبة للاحتفاظ بمرجع.لكنني لا أعتقد أنه مؤهل ليكون خطأ Tomcat.من المرجح أن يكون هناك خطأ في ImageIO.createImageOutputStream() أظن أنه يحتفظ بالمرجع.

نصائح أخرى

ما هو إصدار Tomcat الذي تستخدمه؟بالنسبة لي، يبدو هذا بمثابة خطأ في Tomcat، ولا أستطيع التفكير في أي سبب لاستدعاء طريقة doFilter الخاصة بك مع استجابة تم الالتزام بها بالفعل (إذا كان هذا الفلتر هو الوحيد في السلسلة، فهل أنت متأكد من هذا؟ ).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top