2011-05-03 3 views
1

입니다. 스프링 3을 익히고 HTTPSession이 언제 생성되었으며 수명주기가 언제인지 이해하려고합니다. 내 모든 컨트롤러는 기본적으로 싱글 톤이며 HttpSessionListener을 구성했습니다. sessionCreated이 절대로 호출되지 않는다는 것을 알았습니다.모든 컨트롤러가 싱글 톤일 경우 HTTPSession이 생성되는시기는

하지만 LoginControllerSession 범위 컨트롤러로 만들면 sessionCreated이 호출됩니다. 스프링 컨트롤러가 HttpSession에 의해 관리되고 있는지 알고 싶습니다. 또한 다른 질문은 borowser의 첫 번째 요청이 LoinController이되고 HttpSession이 생성된다는 것입니다. 그런 다음 해당 브라우저에서 다른 컨트롤러 (단일 호스트)에 대한 후속 요청이 동일한 HTTPSession을 사용하거나 상태가 유지되지 않습니까? 누군가 제발 도와 줄 수 있어요.

답변

3

컨트롤러는 싱글 톤이며 상태 비 저장입니다. 디스패처 서블릿은 원하는 컨트롤러 메소드를 호출하고 세션을 세션에 전달합니다. 세션은 디스패처 서블릿에서 request.getSession()을 호출하여 가져옵니다. 정상적인 서블릿이기 때문에 컨테이너는 각 서블릿이 요청할 때마다 얻는 요청과 응답을 "제공"합니다.

즉, 서블릿은 또한 싱글 톤 (컨텍스트 당 하나의 인스턴스가 있음)입니다. 그리고 여러 스레드 (= 요청)가 메소드를 호출합니다.

최종 메모 - 세션 범위 콩은 거의 필요하지 않습니다. 내 경험상 세션 스코프 된 빈없이 전체 애플리케이션을 사용할 수있다.

+0

예, 기본적으로 컨트롤러는 싱글 톤이지만 annotion을 사용하여 세션 범위가되도록 구성 할 수 있습니다. 세션 범위와 싱글 톤 컨트롤러가 혼합 된 경우 동일한 브라우저의 모든 요청에 ​​대해 동일한 HTTPSession을 공유합니까? –

+1

@integral_dev 차이점은 세션 범위 컨트롤러가 상태를 가질 수 있다는 것입니다. 즉, 해당 필드에 값을 할당 할 수 있으며 각 사용자 세션마다 고유하게됩니다. – Bozho

0

세션은 다수의 HTTP 요청을 연관 시키므로 사용자가 생성 한 후에는 서블릿 엔진이 쿠키 또는 URL 재 작성을 사용하여 유지 보수합니다.

+0

답변 해 주셔서 감사합니다. 예, 세션은 여러 요청을 연관시킵니다.하지만 싱글 톤 컨트롤러로 전달 되더라도? 또한 해당 세션의 라이프 사이클은 서브릿 엔진에서 어떻게 유지 관리됩니까? –

관련 문제