Scope는 4가지가 있다
Application, Session, Request, Page
Page는 한 페이지 내에서만 사용할 수 있음
Request는 클라이언트의 요청에 대해서 서버가 응답을 보내기 전까지 사용 가능
Session은 Session이 생성되어 소멸할때까지 사용 가능 - 상태유지할때 사용
Application은 하나의 어플리케이션이 생성되고 소멸될때까지 계속 유지
상세
Page scope
PageContext 라는 추상 클래스 사용
JSP 페이지에선 pageContext라는 내장 객체 사용
forward시 Page scope에 지정된 변수는 사용할 수 없다.
사용방법은 Application scope나 Session scope, Request scope와 같다.
지역변수처럼 사용
jsp에서 pageScope에 값을 저장 한 후, 해당 값을 EL표기법등에서 사용할 때 사용
지역 변수처럼 해당 jsp나 서블릿이 실행되는 동안에만 정보를 유지하고자 할 때 사용
Request scope
http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지하고자 할 경우 사용한다.
서블릿에서는 HttpServletRequest 객체를 사용한다.
JSP에서는 request 내장 객체를 사용한다.
값을 저장할 때는 request.setAttribute()
값을 읽을 때는 request.getAttribute()
forward시 값을 유지하고자 사용한다.
Session scope
웹브라우저 별로 변수를 관리하고자 할 경우 사용
웹 브라우저간의 탭간에는 세션정보가 공유되기 때문에 각각의 탭에서는 같은 세션정보를 사용할 수 있다.
HttpSession 인터페이스를 구현한 객체를 사용한다.
JSP에서는 session 내장변수를 사용한다.
서블릿에서는 HttpServletRequest의 getSession() 메소드 사용
값을 저장할때는 setAttribute(), getAttribute()
장바구니 처럼 사용자별로 유지가 되어야할 정보가 있을때 사용
Application scope
웹 어플리케이션이 시작되고 종료될 때까지 변수를 사용할 수 있다
ServletContext 인터페이스를 구현한 객체를 사용한다
jsp에서는 application 내장 객체를 이용한다
서블릿의 경우는 getServletContext() 메소드를 이용하여 application 객체를 이용한다
웹 어플리케이션 하나당 하나의 application 객체가 사용된다
값을 저장할때는 setAttribute(), getAttribute()
모든 클라이언트가 공통으로 사용해야할 값들이 있을 때 사용한다
JSP에서 실제 호출 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
pageContext.setAttribute("p1", "page scope value");
request.setAttribute("r1", "request scope value");
session.setAttribute("s1", "session scope value");
application.setAttribute("a1", "application scope value");
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
pageContext.getAttribute("p1") : <%=pageContext.getAttribute("p1") %><br>
pageContext.getAttribute("p1") : ${pageScope.p1 }<br>
request.getAttribute("r1") : ${requestScope.r1 }<br>
session.getAttribute("s1") : ${sessionScope.s1 }<br>
application.getAttribute("a1") : ${applicationScope.a1 }<br>
<br><br>
pageContext.getAttribute("p1") : ${p1 }<br>
request.getAttribute("r1") : ${r1 }<br>
session.getAttribute("s1") : ${s1 }<br>
application.getAttribute("a1") : ${a1 }<br>
</body>
</html>
이름이 겹치지 않으면 앞에 pageScope등은 생략 가능
겹치는 경우 가장 작은 범위부터 우선적으로 적용된다
'JSP' 카테고리의 다른 글
EL & JSTL (0) | 2024.02.23 |
---|---|
Redirect & Forward (1) | 2024.02.22 |
JSP (0) | 2024.02.22 |