* 영역객체의 속성과 범위(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 |