본문 바로가기

자바스프링웹공부(2024)/JSP

2024.09.04.영역객체의 속성과 범위(Scope)

반응형

* 영역객체의 속성과 범위(Scope)

JSP 의 4대 영역 : page, request, session, application

 

[ 영역 객체의 유효 범위(= 속성(데이터) 저장 시 전달(공유) 가능한 범위) ]
1) page 영역(pageContext 객체) : 현재 페이지에서만 유효(= 페이지 이동 시 객체 제거됨)
2) request 영역(객체) : 클라이언트 요청에 대한 응답까지 유효(= 새로운 요청 발생 시 객체 제거됨)
3) session 영역(객체) : 세션 유지 조건까지 유효(= 세션 제거 조건 충족 시 객체 제거됨)
4) application 영역(객체) : 서버 동작 시까지 유효(= 서버 중지 시 객체 제거됨)

- 각 영역 객체에 속성값 저장하는 공통 메서드 : setAttribute(String name, Object value)
   => name 이라는 이름(속성명)으로 value 라는 데이터(속성값)를 저장
- 각 영역 객체의 속성값 접근하는 공통 메서드 : Object getAttribute(String name)
    => name 이라는 이름에 해당하는 속성ㅇ르 찾아 해당 속성의 속성값을 Objet 타입으로 리턴
    => 주의! 만약, name에 해당하는 속성이 존재하지 않을 경우 null 값 리턴됨

- 각 영역 객체에 속성값(=데이터) 저장하기 =>setAttribute() 메서드 활용
   pageContext.setAttribute("pageScope", "pageContext 객체의 속성값");
   request.setAttribute("requestScope", "requestContext 객체의 속성값");
   session.setAttribute("sessionScope", "sessionContext 객체의 속성값");
   application.setAttribute("sessionScope", "sessionContext 객체의 속성값");

- 각 영역 객체에 저장된 속성값(data)을 현재 페이지에서 확인하기    => getAttribute()

   pageContext 객체 속성값 : <%=pageContext.getAttribute("pageScope") %>
   sessionContext 객체 속성값 : <%=request.getAttribute("requestScope") %>
   session 객체 속성값 : <%=session.getAttribute("sessionScope") %>
   application 객체 속성값 : <%=application.getAttribute("sessionScope") %>
   -> 속성이 저장된 페이지에서는 모든 영역 객체의 속성값 확인 가능함(모두 유지됨.) 

1)디스패치방식 (Dispatch) 방식 : pageContext 객체의 forward() 메서드 사용 - 지금 데이터를 다음 페이지로 가지고 가려면 이 것을 써야한다.
   => 기존 요청(attributeTest1.jsp)이 유지된 채로 
        서버측에서 새 요청 정보(attributeTest2.jsp)를 처리한 후 새 요청 처리 결과만 응답 데이터로 전송하므로
       이 과정이 하나의 요청/응답으로 처리되어 기존 request 객체가 그대로 유지됨(새로 생성 X)
      따라서, 디스패치 방식으로 포워딩 된 페이지에서 기존 request 객체의 속성에 접근 가능하다!
   => 또한, 새로운 요청이 발생하지 않았으므로 브라우저 주소표시줄의 주소(URL)가 그대로 유지됨
 

- 다른 페이지 이동시 속성값 확인하기

   pageContext 객체 속성값 : null
    => pageContext 객체의 속성값은 현재 페이지를 벗어났으므로 유지되지 않아 null 값 출력됨
   request 객체 속성값 : requestContext 객체의 속성값
    => request 객체의 속성값은 이전 요청이 그대로 유지되므로 저장된 속성값이 출력(유지)됨
   session 객체 속성값 : sessionContext 객체의 속성값
    => session 객체의 속성값은 세션이 그대로 유지되므로 저장된 속성값이 출력(유지)됨
   application 객체 속성값 : applicationContext 객체의 속성값
    => request 객체의 속성값은 서버가 동작중이므로 저장된 속성값이 출력(유지)됨

 

2) 리다이렉트(Redirect) 방식 : response 객체의 sendRedirect() 메서드 사용
    => 기존 요청(attributeTest1.jsp)과 다른 새로운 요청(attributeTest2.jsp)이 발생하여
         test1.jsp 에서 사용된 request 객체가 제거되고, 새 request 객체가 생성되므로
        기존 request 객체에 저장되어 있던 정보(속성값)도 함께 제거됨
        따라서, 최종적으로 리다이렉트 된 페이지(test2.jsp)에서 기존 request 객체의 속성에 접근 시
        해당 속성이 존재하지 않으므로 null 값 리턴(출력)됨!
    => 또한, 새로운 요청 주소(test2.jsp)로 주소표시줄의 주소(URL)가 변경됨

 

- 다른 페이지 이동시 속성값 확인하기

  pageContext 객체 속성값 : null
   => pageContext 객체의 속성값은 현재 페이지를 벗어났으므로 유지되지 않아 null 값 출력됨
  request 객체 속성값 : null
   => request 객체의 속성값은 새로운 요청이 발생했으므로 (=새 request 객체 생성) null값이 출력됨
  session 객체 속성값 : sessionContext 객체의 속성값
   => session 객체의 속성값은 세션이 그대로 유지되므로 저장된 속성값이 출력(유지)됨
  application 객체 속성값 : applicationContext 객체의 속성값
   => request 객체의 속성값은 서버가 동작중이므로 저장된 속성값이 출력(유지)됨
-  세션없애려면 test2.jsp 주소를 복사한다음 현재 크롬을 모두 닫고 다시 주소를 붙여서 사용하면 세션도 null 이된다.  
    test1.jsp를 실행하면 세션이 또 만들어지니까 세션이 꺼진지 확인하려면 바로 test2로 가야 세션이 확인이 된다. 
   엣지에서는 세션이 이어지지않는다. 
   크롬 시크릿창에서도 세션이 이어지지않는다. 완전 별개임.
   - 세션 활용하기 : 일반창 관리자, 시크릿창 사용자 로그인하면 왔따갔다 한다. 엣지, 엣지 프라이빗하면 4명의 사용자를 시연가능함.
-  서버를 껐다가 켜면   4개가 다 날아간다. 어플리케이션은 서버가 동작하는 동안은 정보를 그대로 유지한다. -->

-  getAttribute는 setAttribute로 저장한거 가져오는 용도, getParameter는 form같은데서 전달한 파라미터를 가져오는 용도

반응형

'자바스프링웹공부(2024) > JSP' 카테고리의 다른 글

2024.09.03. response  (6) 2024.09.08
2024.09.02. 주석, form 태그  (0) 2024.09.08