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=한글¶mEng=English").
forward(request, response);
%>
</body>
</html>
- getRequestDispatcher( ): 반환 타입이 RequestDispatcher이며, 요청을 다른 페이지로 넘겨주는 기능을 수행한다.
∴ response.sendRedirect( ): 페이지를 이동시킨다.
5. session 영역
- 클라이언트가 웹 브라우저를 최초로 연 후 닫기 전까지 요청되는 모든 페이지는 session 객체를 공유할 수 있다.
→ 탭만 닫는 것이 아닌, 웹 브라우저 전체를 닫아야 종료된다.
- session: 클라이언트가 서버에 접속해 있는 상태 혹은 단위
6. application 영역
- 웹 애플리케이션은 단 하나의 application 객체만 생성하고, 클라이언트가 요청하는 모든 페이지가 해당 객체를 공유한다.
→ 웹 서버를 시작할 때 생성되며, 종료할 때 삭제된다.
- JSP에선 printf( ) 메서드가 아닌, String.format( ) 메서드를 사용해 포매팅한다.
'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 |
댓글