난 Scope란 말을 처음 들었을 때 총 위 쪽에 달린 조준경을 이야기 하는 줄 알았다.
(물론 의미가 크게 다르진 않다)
jsp 에서 말하는 Scope란 jsp 페이지에서 사용되는 객체들은 jsp 내장 페이지든 페이지 내에서 만들어졌던 간에 모두 정해진 영역 안에서만 사용가능 하다는 개념이다.
Scope의 종류에는 총 4가지가 존재한다.
1. page
2. request
3. session
4. application
페이지 스코프는 가장 작은 범위로, 실제 선언된 jsp 페이지 내에서만 사용 가능하다.
pageContext.setAttribute("name","페이지 영역");
String name = (String)pageContext.getAttribute("name");
setAttribute() 내부에 첫 번째 파라미터로는 String 타입이 들어가고 두 번째 인자로는 Object 타입이 들어간다. 즉, 모든 자료형이 들어갈 수 있으며 객체 들어갈 수 있다는 것이다.
Object타입이 저장되기 때문에 받아올 때도 객체타입이 리턴되기 때문에, 강제 형변환을 통해 받아줘야한다.
주 사용 용도로는 해당 jsp나 Servlet이 실행되는 동안에만 정보 유지하고자 할 때 사용된다.
Reques 스코프는 클라이언트로부터 요청을 받고 응답할 때까지 사용이 가능하다.
request.setAttribute("nick", "장준휴");
String nick = (String)request.getAttribute("nick");
pageScope와 다르게 Servlet에서 사용할때는 HttpServletRequest 객체로 사용 가능하며 service() 메소드가 끝날 때 객체가 사라진다.
여기서 쿠키를 담아 전달한다.
주로 클라이언트의 요청을 다룰 때 사용하며 forward로 데이터 넘겨서 유지하고자 할 때 사용한다.
Session scope는 세션이 유지되는 동안 사용 가능하다. 즉, 서버가 유지되는동안 사용가능하다(브라우저 창 닫기 전까지, 서버가 닫히기 전까지)
Request 와 마찬가지로 HttpSession 객체로 사용 가능 하며 주로 웹 브라우저별 변수를 관리하는 영역이다.
session.setAttribute("nick", "session영역");
String nick = (String)session.getAttribute("nick");
주로 로그인시 사용자 정보를 저장하고 싶을 때 사용한다.
Application scope는 가장 넓은 범위까지 포함 할 수 있는것으로, 웹 어플리케이션이 시작되고 종료될 때 까지 사용이 가능하다.
다른 종류들과 ServletContext객체로 사용이 가능하며 웹 어플리케이션 당 한개의 객체를 사용한다.
application.setAttribute("nick", "application영역");
String nick = (String)application.getAttribute("nick");
전역적으로 사용되는 데이터 저장공간이기 때문에 모든 클라이언트들이공통적으로 사용하는 값을 저장하는데 유리하다.
정리하자면
page영역 : 하나의 페이지만
request 영역 : 한번의 요청까지만
session 영역 : 하나의 브라우저까지만
application 영역 : 하나의 서버, 어플리케이션 까지만(서버가 껐다 켜지면 x)