본문 바로가기
  • 일하면서 배운 내용 끄적이는 블로그
JSP

Scope

by dhl7799 2024. 2. 23.

 

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