HTTP 프로토콜의 통신 방식은
클라이트에게 서버가 응답을 보내는 즉시 끊어지기 떄문에
연결 상태가 유지되지 않는 무상태 통신 방식이다.
때문에 전 요청의 처리 결과가 저장이 되지 않는다.
고로 해당 결과를 서버/클라이언트에 저장하는 정보를 상태 정보라고 함
저장 위치에 따른 저장 기술
(1) 클라이언트 - 쿠키
javax.servlet.http.Cookie
(2) 서버
javax.servlet.ServletContext
javax.servlet.http.HttpSession
javax.servlet.http.HttpServletRequest
유지 기간에 따른 저장 기술
(1) 웹 애플리케이션 단위
javax.servlet.ServletContext
(2) 클라이언트 단위
javax.servlet.http.Cookie
javax.servlet.http.HttpSession
(3) 요청 단위
javax.servlet.http.HttpServletRequest
ServletContext
- 서블릿 컨테이너와 통신하기 위해서 사용되는 메소드를 지원하는 인터페이스
- 웹 어플리케이션 단위로 자동 생성/ 중지될 때 소멸
- 웹 어플리케이션 내에 모든 서블릿 간 정보 공유, 정보 추출을 할 수 있게 한다.
- ServletConfig 객체에서 ServletContext 객체의 주솟값을 추출 - getServletContext 이용
(ServletConfig 사용 방법과 동일. init() 으로 추출 / HttpServlet 통해서 추출)
<context-param>
ServletContext 객체에 변수를 설정할 때 사용하는 태그
웹 어플리케이션 서비스 시작과 동시에 처리해야 하는 값을 전달하고자 할 때 사용
getInitParameter() : ServletContext 객체에 설정한 변수 추출
getMajorVersion() : WAS에서 지원하는 서블릿의 Major 버전 정보 반환
getMinorVersion() : WAS에서 지원하는 서블릿의 Minor 버전 정보 반환
getServerInfo() : 현재 사용 중인 서블릿 컨테이너의 이름과 버전 정보 반환
getContextPath() : 웹 어플리케이션을 찾아가기 위해 사용하는 경로 반환
getServletContextName() : <display-name>로 둘러쌓인 웹 어플리케이션 이름 반환
getRealpath() : URI의 실제 물리적인 경로 반환
ServletContext 객체에 등록 / 추출 / 삭제 메소드
void setAttribute(String 데이터이름, Object 공유하기 위한 데이터) : 데이터 등록 메소드
Object getAttribute(String 데이터이름) : 데이터 추출 메소드
void removeAttribute(String 데이터이름) : 데이터 삭제 메소드
Cookie
- 클라이언트 단위로 정보 유지가 필요할 때 사용한다
- 클라이언트 요청 정보의 헤더에 포함되어 전달 된다.
- 설정 시 name = value 로 구성
- 만료 날짜, 유효경로, 보안필드 등을 추가 지정 가능
쿠키를 써야하는 상황들
- 방문한 적 있는 웹서버에 재 방문 시 몇번째 방문인지 알아야하는 때
- 회원 가입에서 자동으로 주소, 전화번호 등을 입력하는 때
- 로그인~ 로그 아웃까지 인증 상태 유지
- 쇼핑몰에서 장바구니 선택한 상품 정보 유지
- 쇼핑몰에서 클라이언트가 체크한 상품 정보 유지
Session
- HttpSession 객체는 getSession() 을 이용하여 생성
- HttpSession 객체 생성 시 세션 ID가 생성되어 클라이언트에 쿠키로 부여
- 클라이언트 별로 상태정보를 개별 유지하는 기술을 세션 트래킹이라고 함.
HttpServletRequest의 getSession()
클라이언트가 가진 세션 ID와 동일한 세션 객체를 찾아서 주솟값을 반환
세션이 없다면 새로 생성 후 반환
만약 getSession(boolean 매개변수) 인데 세션이 없다면
매개변수가 true => 동작이 같음. 새로 생성 후 반환
false => 생성하지 않고 null 반환
쿠키와 세션의 차이
쿠키 | 세션 | |
저장 위치 | 클라이언트 | 서버 |
저장 데이터 타입 | 텍스트 | 객체 |
저장 데이터 크기 | 제한 있음 | 서버에 수용 가능한 만큼 |
HttpServletRequest
기본적으로 service()가 실행 될 때 생성 되고 종료 될 때 사라진다.
고로, 한 번의 요청으로 여러 페이지가 실행될 때, 페이지 간에 데이터를 공유하기 위해 사용하는 방법
요청 재지정
클라이언트의 요청에 대해 서버에 존재하는 다른 자원으로 요청을 재지정하는 것
해당 기능을 제공하는 객체는 HttpServletRequest / RequestDispatcher
HttpServletRequest 요청 재지정 메소드 (동일한 웹 어플리케이션/서버가 아니어도 됨)
접근자 및 타입 | 메소드 | 설명 |
public void | sendRedirect(String 위치) | 위치에 설정된 자원으로 요청 재지정 |
public String | encodeRedirectURL(String url) | url에 설정된 URL 문자열에 세션 ID 정보를 추가 후 요청 재지정 |
RequestDispatcher 요청 재지정 메소드 (동일한 웹 어플리케이션이여야 됨)
접근자 및 타입 | 메소드 | 설명 |
public void | forward(ServletRequest req, ServletResponse resp) | 요청을 다른 자원으로 넘긴다. 그 다른 자원의 응답이 클라이언트에게 간다. |
public void | include(ServletRequest req, ServletResponse resp) | 다른 자원의 처리 결과를 현재 페이지에 포함 시킨다. 응답은 현재 페이지 + 다른 자원 처리 까지 나온다. |
RequestDispatcher 객체 생성 메소드
ServletContext 객체에서 제공 메소드
RequestDispatcher getNameDispatcher(String name)
RequestDispatcher getRequestDispatcher(String path)
ServletRequest 객체에서 제공 메소드
RequestDispatcher getRequestDispatcher(String path)
'프로젝트 진행 공부 > Servlet & JSP' 카테고리의 다른 글
8장 JSP 프로그래밍 (0) | 2022.10.27 |
---|---|
7장 필터 / 리스너 / 오류처리 (0) | 2022.10.27 |
5장 서블릿 설정과 변수 (0) | 2022.10.24 |
4장 (0) | 2022.10.24 |
1~3장 (0) | 2022.10.19 |
댓글