2011-01-06 5 views
2

ServletContextListener가 무엇인지, web.xml에 구현/등록하는 방법을 알고 있습니다.ServletContextListener로 등록 된 클래스의 라이프 사이클은 무엇입니까?

하지만 질문은 다음과 같습니다. 웹 애플리케이션의 시작에서 javaVM 당 하나의 리스너 인스턴스가 생성됩니다. 그런 다음 해당 contextInitialized() 메서드가 호출됩니다.

응용 프로그램을 닫는 순간에 listener의 contextDestroyed() 메서드가 호출됩니다. 그러나 리스너의 경우와 같은가요? 또는 첫 번째 인스턴스를 파괴하고 contextDestroyed() 호출을 위해 새로 만들 수 있습니까?

+0

수명주기는 응용 프로그램이 지속되는 동안 발생합니다 (필자는 생각합니다). –

+0

나는 증명 링크를보고 싶다 :) – Mikhail

답변

4

서블릿 사양에 대한 확실한 근거가 있어야합니다. 나는이 질문에 대한 명확한 답을 제공 모르겠지만, 강한 힌트를 제공한다 :

SRV.10.3.3 수신기 등록
웹 컨테이너가 각 리스너 클래스의 인스턴스를 생성하고 응용 프로그램에 의해 첫 번째 요청이 처리되기 전에 이벤트 알림을 위해 을 등록합니다.

이는 첫 번째 요청을 처리 한 후에 인스턴스를 만드는 것이 금지되어 있음을 나타냅니다.

+0

나는이 문제를 쳤다. 명시 적 응답은 http://docs.oracle.com/cd/B12166_01/web/B10321_01/filters.htm, "이벤트 리스너 선언 및 호출"절에서 제공됩니다. 여기서 전체 단락을 인용하는 것은 너무 길다. 요점은 "모든 청취자는 마지막 요청이 애플리케이션에 대해 서비스 될 때까지 활성 상태로 남아있을 것이다"이다. –

1

contextInitialized() 및 contextDestroyed()에 코드를 추가하는 것은 어떻습니까? 이 같은

뭔가 :

System.out.println(this.toString()) 

당신이 진수 (@의 8104b1)에서 객체의 해시 코드를 볼 수 오브젝트의 기본 toString 메서드를 오버라이드 (override)하지 않는 것을 가정하고 수행하여 당신은 그것을 여부를 확인 할 수 같은 대상입니다.

+0

이것은 인스턴스가 몇몇 특별한 경우에만 동일하다는 것을 증명할 것이다 :) – Mikhail