سؤال

لدي مثيل Tomcat 6.20 قيد التشغيل، وأود إرسال بريد إلكتروني عبر مؤشر ترابط خلفية لمنع وظيفة إرسال البريد الإلكتروني من حظر الطلب.

هل هناك أي طريقة يمكنني تنفيذ مؤشر الترابط في الخلفية، مع الاستفادة من تدفق الصفحات العادية تحدث.

التطبيق مكتوب في ICEACACES.

شكرًا.

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

المحلول

  1. يخترع Executor استخدام java.util.concurrent.Executors.newCachedThreadPool (أو واحدة من أساليب المصنع الأخرى) في طريقة تهيئة وحدة التحكم / Servlet الخاصة بك.
  2. عندما يأتي طلب، لف منطق إرسال البريد في java.lang.Runnable
  3. تقديم Runnable إلى Executor

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

نصائح أخرى

ضع البريد الإلكتروني الخاص بك إرسال في مكان Thread.sleep(). وبعد ضع الإنتاج الخاص بك بدلا من sendRedirect().

public void doUrlRequest(HttpServletRequest request, HttpServletResponse response) {
    try {
        response.sendRedirect("/home");
    } catch (IOException e) {
        CustomLogger.info(TAG, "doUrlRequest", "doUrlRequest(): "+e.getMessage());
    }
    (new Thread() {
        public void run() {
            try {
                Thread.sleep(9000);
                System.out.println("Awoken!");
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }).start();

لقد وجدت مخرجا. هذه العلامات

@PostConstruct()

و

@PreDestroy()

قم بإنشاء طريقين في Serverlet الذي يؤدي إلى إرجاع الفراغ وقبول أي معلمات. ضع العلامة الأولى مباشرة فوق الطريقة الأولى والعلامة الثانية فوق العلامة الثانية.

جوهر العلامات

يتم استدعاء طريقة PostConstruct بواسطة الحاوية قبل بدء الفصل المنفذ في الرد على عملاء خدمة الويب.

يتم استدعاء طريقةpredestroy بواسطة الحاوية قبل إزالة نقطة النهاية من العملية.

داخل أسلوب Postconstruction () إنشاء مؤشر ترابطك باستخدام واجهة Runnable واجهتها في حلقة لا نهائية إلا إذا كانت قيمة متغير منطقي معين خاطئ.

استخدم طريقة Predestroy () لتعيين المتغير المنطقي إلى False.

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