Back-end/JSP

JSP) 영역(Scope) 객체와 속성(Attribute), 페이지 이동 방법 4가지

luana_eun 2022. 3. 1. 17:48
728x90

JSP가 제공하는 9가지의 내장객체 중 4가지(pageContext, session, request, application)는

각각 특정 범위(scope)와 그 범위 안에서 공유할 수 있는 객체(데이터)(Attribute)를 가진다. 

 

속성(Attribute): 공유되는 데이터

영역(Scope): 속성을 공유할 수 있는 유효범위

영역객체: 해당 영역에서 속성을 사용할 수 있는 내장 객체.

              ex) page영역에 데이터를 저장하려면 pageContext라는 영역객체를 사용해야하고,

                   session 영역에 데이터를 저장하려면 session 영역객체를 사용해야한다. 

영역과 영역객체


영역객체 사용방법

영역객체에 속성 저장: setAttribute(속성명, 값)

영역객체의 속성 출력: getAttribute(속성명)

영역객체의 속성 삭제: removeAttribute(속성명)

<%
		//각 객체별로 영역객체 저장
		pageContext.setAttribute("p", "오늘");
		request.setAttribute("r", "날씨가");
		session.setAttribute("s", "맑고");
		application.setAttribute("a", "선선하다");
%>

// 영역객체 출력
pageContext 영역객체 값: <%=pageContext.getAttribute("p") %><br>
request 영역객체 값: <%=request.getAttribute("r") %><br>
seesion 영역객체 값: <%=session.getAttribute("s") %><br>
application 영역객체 값: <%=application.getAttribute("a") %><br>

 


이동에 따라 영역객체가 어디까지 사용되는지 예제

+ 페이지 이동 방법 4가지 

다시 한번 되짚어보면,

      page: 같은 페이지 내에서만 사용가능

      request: 요청이 처리되는 동안

      sessioin: 세션 사용동안

      application: 프로그램 전체

 

scopeSetPage.jsp에서 영역객체를 생성하고 scopeGetPage.jsp에서 값을 꺼낼 수 있는지 확인!!

 

 

scopeSetPage.jsp 에서 각 영역별로 객체 생성

<%
	//각 객체별로 영역객체 저장
	pageContext.setAttribute("p", "오늘");
	request.setAttribute("r", "날씨가");
	session.setAttribute("s", "맑고");
	application.setAttribute("a", "선선하다");
%>

 

 

방법1. 페이지 이동) a 태그:  <a href ="scopeGetPage.jsp">

 

방법2. 페이지 이동) 자바스크립트:  location.href='scopeGetPage.jsp'

 

방법3. 페이지 이동) response객체:  response.sendRedirect("scopeGetPage.jsp");

 

방법4. 페이지 이동) 액션태그:  <jsp:forward page="scopeGetPage.jsp"></jsp:forward>

 

페이지 이동해서 영역객체 값을 꺼내본 결과

영역에 맞게 session, application만 값이 나오고 page, request는 null값이 나오는걸 볼 수 있다. 

 

근데 이상한게 있다. 바로 방법4의 forward. forward방법은 request값도 가져오고있다. 

이전에 액션태그 포스트( https://luanaeun.tistory.com/116 )에서

forward는 요청과 응답처리권을 이동할 페이지에 영구적으로 넘긴다고 했다. 

따라서 request객체에 저장한 값을 꺼낼 수 있는것이다. 

728x90