سؤال

أقوم بتشغيل تطبيق ويب Stripes على JBOSS 4.2.3.GA وأحاول استدعاء طريقة عندما أبدأ JBOSS. لقد قمت بإنشاء ServletContextListener مثل SO:

public class TimerContextListener implements ServletContextListener {

    @Inject
    private TimerManager timerManager;

    public void contextInitialized(ServletContextEvent servletcontextevent) {
        ((Injector) servletcontextevent.getServletContext().getAttribute(GuiceServletContextListener.KEY)).injectMembers(this);
        timerManager.stopAllTimers();
        timerManager.startTimer();
    }

    public void contextDestroyed(ServletContextEvent servletcontextevent) {

    }
}

وأضفت إدخالًا في web.xml مثل ذلك:

<listener>
        <listener-class>com.lawless.web.servletContextListeners.TimerContextListener</listener-class>
    </listener>

لكن السياق () يتم استدعاؤه 3 مرات عندما أبدأ الخادم الخاص بي. أي فكرة عما يمكن أن تكون عليه القضية؟ شكرًا.

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

المحلول

حسنًا ، لقد اكتشفت ذلك. تم استدعاؤه 3 مرات لأن لدي 3 مضيفين افتراضيين محددة في jboss-web.xml. لست متأكدا لماذا يسبب هذا السلوك رغم ذلك. إذا تمكن أي شخص من شرح السبب في أنني سأقدر ذلك.

نصائح أخرى

سيكون هناك واحد فقط ServletContext لكل تطبيق ويب. ServletContext سيتم إنشاءها أثناء نشر التطبيق (3 مضيفين افتراضيين يعني النشر إلى 3 مضيفين مختلفين مع 3 عناوين IP مختلفة). مرة واحدة في ServletContext يتم إنشاؤه ، وسيتم استخدامه من قبل جميع ملفات Servlets و JSP في نفس التطبيق. ServletContext يسمى أيضًا كمتغيرات نطاق التطبيق في سيناريو تطبيق الويب.

مصدر - http://www.javabeat.net/2009/02/servletcontextlistener-example/

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