반응형

며칠전 면접을 보았는데 거기 필기문제에 Page, Reqest, Session, Application 의 Scope에 관한 문제가 나오더군요.

 

1. (JSP) Page scope

실제 선언된 JSP페이지 내에서만 사용할 수 있습니다.

  • PageContext추상 클래스를 사용하며,
  • JSP페이지에서 pageContext라는 내장객체로 사용이 가능합니다.
  • pageContext이름.setAttribute(), pageContext이름.getAttribute()등의 방법으로 바로 사용이 가능합니다.
  • forward가 될 경우 해당 Page scope에 지정된 변수는 사용할수가 없습니다. 어떤 페이지로 요청이 들어온 뒤, 다른 페이지로 forward될 경우 이전 page scope내에 있던 변수는 forward된 page scope내에서 사용할 수가 없습니다.
  • 그러나 Request는 forward와 상관없이, 한번 요청 후 응답할 때까지 계속 유지 됩니다.
  • 마치 지역변수처럼 사용된다는 것이 다른 Scope들과 다른 점입니다.
  • pageScope는 지역변수와 별 차이가 없기 때문에 많이 쓰이지는 않지만, 종종 필요한 경우가 있습니다. JSP에서 pageScope에 값을 저장한 후 해당 값을 EL 표기법 등에서 사용할 때, 지역 변수처럼 해당 JSP나 Servlet이 실행되는 동안에만 정보를 유지하고자 할 때 사용됩니다.

2. Request scope

  • 클라이언트로부터 하나의 요청이 들어와서 서버가 일을 수행한 후 응답을 보낼때까지, 계속 사용할수 있는 scope입니다.
  • Web container 안에 있는 Servlet에 대한 http요청을, WAS가 받아서 웹 브라우저에게 응답할 때까지 변수 값을 유지하고자 할 경우 사용합니다. 모든 요청이 들어올 때마다, WAS는 request 객체와 response 객체를 만듭니다. forward여부 등과 상관없이, 하나의 요청이 들어와서 응답이 나갈 때까지 계속 유지됩니다.
  • Servlet의 service() 메소드가 끝날 때 Request Scope가 끝납니다.(request객체가 없어집니다.)
  • JSP에서는 request 내장 변수를 사용합니다.
  • Servlet에서는 HttpServletRequest 객체를 사용합니다.
  • 값을 저장할 때는 request 객체의 setAttribute() 메소드를 사용합니다.
  • 값을 읽어 들일 때는 request객체의 getAttribute() 메소드를 사용합니다.
  • 사용목적은 forward시 값을 유지하고자 사용합니다.
  • forward 하기 전에 request 객체의 setAttribute()메소드로 값을 설정한 후, Servlet이나 JSP에게 결과를 전달하여 값을 출력하도록 하였는데, 이렇게 forward되는 동안 값이 유지되는 것이 Request scope를 이용한 것입니다.

3. Session scope

  • session 객체가 생성되고 소멸 될 때까지 request는 하나의 요청과 응답이 나갈때까지이지만, Session scope는 session객체가 만들어 져서 소멸될 때까이므로, 하나가 아닌 여러개의 요청이 들어와도 계속 남아 있습니다.
  • 웹 브라우저 별로 변수를 관리하고자 할 경우 사용하며, 보통 웹 브라우저를 클라이언트라고 지칭하는데, 이는 여러 개가 있을 수 있습니다. Session scope는 하나의 클라이언트마다 객체를 만들어서 관리하는 것입니다. 따라서 session scope는 한 클라이언트 내의 여러 개의 request들을 다 커버합니다.
  • 웹 브라우저 탭 간에는 세션정보가 공유되기 때문에, 각각의 탭에서는 같은 session정보를 사용할 수 있습니다.
  • Request scope와 달리, 하나의 session scope내에서는 하나의 request가 끝난다고 해도 session객체는 계속 유지될 것입니다. 미리 지정해 놓은 시간이 초과되거나, 탭이 닫히는 경우에 session이 종료됩니다. 즉 request보다는 정보를 오래 유지하게 되는 것입니다.
  • HttpSession 인터페이스를 구현한 객체를 사용합니다.
  • JSP에서는 session 내장 변수를 사용합니다.
  • Servlet에서는 HttpServletRequest의 getSession() 메소드를 이용하여 session 객체를 얻습니다.(여기서 Request의 메소드를 사용하는 이유는, session 객체가 어떤 클라이언트의 요청인지 알아야 하기 때문입니다.)
  • 값을 저장할 때는 session객체의 setAttribute()메소드를 사용합니다.
  • 값을 읽어 들일 때는 session객체의 getAttribute()메소드를 사용합니다.
  • 쇼핑몰 장바구니처럼 사용자 별로 유지되어야 할 정보가 있을 때 사용합니다.

4. Application scope

  • 하나의 application이 생성되고 소멸될 때까지 계속 유지합니다.
  • Eclipse에서 하나의 Project가 하나의 Application이라고 생각하면 되고, 하나의 Server에는 여러 개의 Web application이 존재할 수 있습니다.
  • 웹 어플리케이션이 시작되고 종료(혹은 다시 시작)될 때까지 변수를 사용할 수 있습니다.
  • ServletContext 인터페이스를 구현한 객체를 사용합니다.
  • JSP에서는 application 내장 객체를 이용합니다.
  • Servlet의 경우는 getServletContext() 메소드를 이용하여 application 객체를 이용합니다.
  • 웹 어플리케이션 하나당 하나의 application 객체가 사용됩니다.
  • 값을 저장할 때는 applciation객체의 setAttribute() 메소드를 사용합니다.
  • 값을 읽어 들일 때는 application객체의 getAttribute() 메소드를 사용합니다.
  • 모든 클라이언트가 공통으로 사용해야 할 값들이 있을 때 사용합니다. 하나의 application scope는 여러 클라이언트들이 사용할 수 있기 때문입니다.

 

 

참고 사이트

https://starkying.tistory.com/entry/Servlet-JSP%EC%9D%98-4%EA%B0%80%EC%A7%80-Scope

반응형
블로그 이미지

꽃꽂이하는개발자

,