لماذا تسمى السياق () عدة مرات؟
سؤال
أقوم بتشغيل تطبيق ويب 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/