본문 바로가기
JSP/성낙현의 JSP 자바 웹 프로그래밍

내장 객체의 영역(Scope)

by k-mozzi 2023. 5. 30.
반응형
Preface

 

이번 장에선 내장 객체의 4가지 영역을 공부했다.

 

JSP 개념과 더불어 사용하는 자바 코드도 딱히 어려울만한 부분이 없어서 쉽게 이해하고 넘어갈 수 있었다.


 

1. 내장 객체의 영역이란?

 

 

- 내장 객체의 영역

1) page 영역: 동일한 페이지에서만 공유

2) request 영역: 하나의 요청에 의해 호출된 페이지와 포워드된 페이지까지 공유

3) session 영역: 클라이언트가 처음 접속한 후 웹 브라우저를 닫을 때까지 공유

4) application 영역: 한 번 저장되면 웹 애플리케이션이 종료될 때까지 유지

 

 

- 애플리케이션 구조에 따라 더 큰 범위의 영역은 더 작은 범위의 영역을 하나 이상 포함할 수 있다.

 

 

- 영역이 제공하는 주요 메서드

1. void setAttribute(String name, Object value)
1) 각 영역에 속성을 저장한다.
2) 첫 번째 인수는 속셩명, 두 번째 인수는 저장할 값이다.
3) 값의 타입은 Object이므로 모든 타입의 객체를 저장할 수 있다.


2. Object getAttribute(String name)
1) 영역에 저장된 속성값을 얻어온다.
2) 원래 타입으로 형변환 후 사용해야 한다.


3. void removeAttribute(String name)
1) 영역에 저장된 속성을 삭제한다.
2) 삭제할 속성명이 존재하지 않더라도 에러가 발생하지 않는다.

 


 

2. 데이터 전송 객체(DTO) 준비

 

 

- 데이터 전송 객체(Data Transfer Object): 주로 데이터를 저장하거나 전송하는 데 쓰이는 객체

1) 다른 로직 없이 순수하게 데이터만을 담고 있다.

2) 자바빈즈 규약을 따른다.

 

 

- 자바빈즈(JavaBeans): 자바로 작성한 소프트웨어 컴포넌트

→ 특정 규약을 따르는 자바 클래스이다.

1) 디폴트 패키지 이외의 패키지에 속해야 한다.

2) 멤버 변수(속성)의 접근 지정자는 private으로 선언한다.

3) 기본 생성자가 있어야 한다.

4) 멤버 변수에 접근할 수 있는 getter, setter 메서드가 있어야 한다.

5) getter, setter 메서드의 접근 지정자는 public으로 선언한다.

 


 

3. page 영역

 

 

- page 영역: 클라이언트의 요청을 처리하는 데 관여하는 JSP 페이지마다 하나씩 생성된다.

1) 각 JSP 페이지는 page 영역 사용을 위한 pageContext 객체를 할당받는다.

2) pageContext: 내장 객체 중 하나로 해당 페이지에서만 사용할 수 있다.

3) include 지시어로 포함한 파일은 page 영역이 공유된다.

4) 객체가 아닌 기본 타입 값들은 해당 wrapper 클래스로 자동 박싱된 후 저장된다.

5) 저장한 객체가 문자열이거나 기본 타입의 래퍼 클래스라면 별도의 형변환 없이 출력할 수 있다.

 


 

4. request 영역

 

 

- request 영역: 클라이언트가 요청을 할 때마다 새로운 request 객체가 생성된다.

1) 같은 요청을 처리하는 데 사용되는 모든 JSP 페이지가 객체를 공유한다.

→ 현재 페이지와 포워드된 페이지까지 공유한다.

2) 페이지 이동 시에는 소멸되어 사용할 수 없다.

→ 하나의 요청에 대한 응답이 완료되면 request 영역은 소멸된다.

 

 

- request 내장 객체를 통해 포워드를 수행하는 코드

→ 포워드 시 쿼리스트링으로 매개변수를 전달할 수 있다.

request.getRequestDispatcher("포워드할 파일 경로").forward(request, response)

 

<%@ page import="common.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
request.setAttribute("requestString", "request 영역의 문자열");
request.setAttribute("requestPerson", new Person("안중근", 31));
%>
<html>
<head>
<title>request 영역</title>
</head>
<body>
	<h2>request 영역의 속성값 삭제하기</h2>
	<%
	request.removeAttribute("requestString");
	request.removeAttribute("requestInteger"); // 에러 없음
	%>
	<h2>request 영역의 속성값 읽기</h2>
	<%
	Person rPerson = (Person) (request.getAttribute("requestPerson"));
	%>
	<ul>
		<li>String 객체 : <%=request.getAttribute("requestString")%></li>
		<li>Person 객체 : <%=rPerson.getName()%>, <%=rPerson.getAge()%></li>
	</ul>
	<h2>포워드된 페이지에서 request 영역 속성값 읽기</h2>
	<%
	request.getRequestDispatcher("RequestForward.jsp?paramHan=한글&paramEng=English").
	forward(request, response);
	%>
</body>
</html>

 

 

- getRequestDispatcher( ): 반환 타입이 RequestDispatcher이며, 요청을 다른 페이지로 넘겨주는 기능을 수행한다.

∴ response.sendRedirect( ): 페이지를 이동시킨다.

 


 

5. session 영역

 

 

- 클라이언트가 웹 브라우저를 최초로 연 후 닫기 전까지 요청되는 모든 페이지는 session 객체를 공유할 수 있다.

→ 탭만 닫는 것이 아닌, 웹 브라우저 전체를 닫아야 종료된다.

 

 

- session: 클라이언트가 서버에 접속해 있는 상태 혹은 단위

 


 

6. application 영역

 

 

- 웹 애플리케이션은 단 하나의 application 객체만 생성하고, 클라이언트가 요청하는 모든 페이지가 해당 객체를 공유한다.

→ 웹 서버를 시작할 때 생성되며, 종료할 때 삭제된다.

 

 

- JSP에선 printf( ) 메서드가 아닌, String.format( ) 메서드를 사용해 포매팅한다.

 

728x90
반응형

'JSP > 성낙현의 JSP 자바 웹 프로그래밍' 카테고리의 다른 글

데이터베이스(DB)  (2) 2023.06.07
쿠키(Cookie)  (0) 2023.06.04
내장 객체(Implicit Object)  (0) 2023.05.29
JSP 기본  (0) 2023.05.27
이클립스 JSP 404 에러 해결 방법  (0) 2023.05.26

댓글