서블릿의 스코프(scope)는 서블릿 API에 바인딩된 속성에 대한 접근 범위를 의미합니다.
ServletContext에 바인딩된 속성은 애플리케이션 전체에서 접근할 수 있으므로 애플리케이션 스코프를 갖습니다.
HttpServlet에 바인딩된 속성은 그 HttpSession에 해당하는 브라우저에만 접근할 수 있으므로 세션 스코프를 갖습니다. HttpServletRequest는 해당 요청/응답에 대해서만 접근하므로 리퀘스트 스코프를 갖습니다.
스코프의 기능
- 로그인 상태 유지
- 장바구니 기능
- MVC의 Model과 VIew의 데이터 전달기능
스코프의 종류 | 해당 서블릿 API | 속성의 스코프 |
애플리케이션 스코프 | ServletContext | 속성은 애플리케이션 전체에 대해 접근 |
세션 스코프 | HttpSession | 속성은 브라우저에서만 접근 |
리퀘스트 스코프 | HttpServletRequest |
속성은 해당 요청/응답 사이클에서만 접근 |
이제 코드로 작성해 보겠습니다
SetAttribute 클래스에 ServletContext, HttpSession, HttpServletRequest 객체의 setAttribute() 메서드를 이용해 속성을 바인딩 합니다.
두번째 서블릿인 GetAttribute 클래스를 다음과 같이 작성합니다. 각 서블릿 API들의 getAttribute() 메서드를 이용해 속성 이름으로 바인딩한 값을 가져와 브라우저로 출력하겠습니다.
브라우저에서 /set으로 요청해 속성을 바인딩하겠습니다.
Context와 Session 객체에 바인딩된 속성은 같은 브라우저에서 접근할 수 있으므로 값을 출력합니다. 그러나 기존에 바인딩된 request 객체는 /get으로 요청하여 생성된 request객체와 다르므로 null이 출력됩니다.
인터넷 익스플로러에서 /get을 요청한다면??
익스플로러에서 요청했기 때문에 이번에는 크롬 세션 객체에는 접근할 수 없어 null을 출력합니다. 반면에 Context객체에 바인딩된 데이터는 모든 브라우저에 같은 결과를 출력하게 됩니다.
'2020 > JSP SERVLET' 카테고리의 다른 글
Filter API (0) | 2019.12.09 |
---|---|
서블릿 URL pattern (0) | 2019.12.09 |
세션 로그인 session login (0) | 2019.12.09 |
세션을 이용한 로그인 정보 바인딩 (0) | 2019.12.06 |
세션 유효 시간 재설정, 세션 삭제 (0) | 2019.12.05 |