자바 서블릿 컨테이너는 실제로 관리되는 코드 컨테이너입니다. 서블릿은 수명주기가 매우 잘 정의 된 구성 요소이며 컨테이너와 구성 요소 (필터도 포함될 수 있음)간에 매우 잘 정의 된 계약이 있습니다.
지정 되었 듯이 웹 앱은 수동 반응 형 시스템입니다.
사용자 정의 스레드가 (엄격하게) 허용되지 않는다는 점에서 수동적입니다. (일부 컨테이너는이 제한을 적용하지 않을 수 있지만 자신의 스레드를 산란하여 효과적으로 예약을 벗어나기 때문에 예기치 않은 동작이 발생할 수 있습니다.)
서버에서의 활동 귀하의 코드베이스) 요청에 대한 응답으로 발생하고, 이들은 일반적인 서블릿 애플 리케이션 HTTP 요청에 대한 것입니다.
ServletContext는 컨테이너에있는 특정 웹 응용 프로그램의 모든 구성 요소에 대한 공유 컨텍스트입니다. 이 컨텍스트는 웹 응용 프로그램이 활성화 될 때 만들어지며 비활성화 될 때 소멸됩니다. ServletContextListener 구성 요소를 사용하여 라이프 사이클에 연결하고 라이프 사이클 이벤트에 대한 알림 콜백을받을 수 있습니다.
1 - 생성과 활성을 관리 할 ServletContextListner 구성 요소를 등록 : 당신이 야생 측에 계속하여 웹 응용 프로그램에서 활성 요소를 산란하고자하는 경우
, 당신은 다음을 고려하실 수 있습니다 구성 요소. 웹 응용 프로그램 시작/활성화시 컨테이너에서 콜백을받습니다. 여기서 스레드 구성 요소를 시작할 수 있습니다. 이 컴포넌트는 ServletContext에 대한 참조를 전달받을 것이므로, 그 참조를 쓰레드 된 컴포넌트에 전달할 수있다.
2 - ServletContextListener가 컨텍스트 종료 콜백을 수신 할 때 스레드를 완전히 종료하는 방법을 제공해야한다는 의미에서 스레드 구성 요소 클래스 (Thread 확장 또는 Runnable 구현 여부)를 관리해야하는지 여부. 실행 가능한 작업을 공식화하는 경우에는 ExecutorService이 필요한 기능을 제공하므로 사용자는 바퀴를 재발 명할 필요가 없습니다.
그렇다면 요구 사항을 검토하고 선택한 디자인과 웹 컨테이너 플랫폼을 검토 할 수 있습니다. 보다 정교한 백엔드 스택이 정말로 필요할 수도 있습니다.
"올바른 방법"은 해당 스레드가 수행해야하는 작업에 따라 다릅니다. 'ServletContext'는 무엇을 필요로합니까? – BalusC
안녕하세요 BalusC, 귀하의 의견에 감사드립니다. ServletContext는 일종의 중앙 데이터 저장소로 사용되었습니다.대신 방금 스레드 안전 싱글 톤을 통해 중앙 데이터 저장소를 구현했습니다. – Ittai