마트철수

[058] 세션, 쿠키, 포워딩 본문

KB IT's Your Life/교육

[058] 세션, 쿠키, 포워딩

마트스 2024. 7. 30. 17:52

 
2024.07.30(화)
 
JSP, Selvlet 3일차

스터디 때 한 번 설명을 들었던
세션, 쿠키에 대해서 배웠다.

그리고 RequestDispatch 클래스를
이용한 forward 방법도 !

스터디에 참여한 보람이 있구망 🥹
 
 


 
JSP, selvlet
 

PART01 시작하기

  • CH01.1 웹 애플리케이션 개요 
  • CH01.2 웹 애플리케이션  프로젝트

PART02

  • CH02.3 JSP 문법

PART03

  • CH03.1 HTML5 Form 태그화 서블릿
  • CH03.2 필터

PART04

  • CH04.1 서블릿 고급 - 세션, 쿠키
  • CH04.2 요청 포워딩, 리다이렉트

 

ch03.2 필터

 

필터

  • 클라이언트와 서버 사이에서 request와 response 객체를 먼저 받아
    사전/사후 작업 등 공통적으로 필요한 부분을 처리하는 것
  • 다수의 Filter를 체인으로 연결 가능

Filter 인터페이스

  • 필터 기능을 구현하는 데 핵심적인 역할
  • Filter 인터페이스 메소드: init(), doFilter(), destroy()

뒤로 가기 구현하고 싶다면?
- filter에서 뒤로가기는 그냥 페이지만 다시 보여지는 것
- 새로고침을 눌러야 실행 시간을 알 수 있음
 

ch04.1 서블릿 고급 - 세션, 쿠키

 
세션 관리

세션

  • 서버와 클라이언트 간의 지속적인 연결 상태를 가짐
  • HttpSession 클래스를 이용한 세션 관리
    • 서버는 브라우저를 식별함
    • 언제 세션이 사라지는가? 브라우저가 종료할 때
서버에서 브라우저 종료 여부를 어떻게 아는지? Time-out을 정해둠 / 요청이 없으면 세션 제거 (기본 30분)

 

  • 세션 관리 확인하는 방법
    • 응용 프로그램, 네트워크
    • Header에 쿠키 정보를 항상 붙여서  통신함(Key값은 JSSESION)
    • Tomcat이 식별하는 것은 Browser(다른 창에 열려있으면 구분)
JSSESIONID를 통해서 쿠키 관리

 

  • 주요 메서드

 

※ 프로그램 지정단위는 '초' / xml 지정단위는 '분'

 

  • 세션의 생성: 브라우저가 접속할 때 자동 생성
  • 세션의 제거방법:
    • time-out 지정
    • invalidate() 메서드로 즉시 제거
    • removeAttribute(name) 메서드로 특정 속성 값 제거

 

쿠키 관리

 

Cookie 클래스를 이용한 쿠키 처리 방법

  • 사용자의 상태 정보를 클라이언트에서 관리
  • 보안에 매우 취약
  • 클라이언트의 브라우저 메모리나 OS파일에 저장 가능
    (파일로 저장하고 싶다면? Timeout 지정해주면 됨)
  • 기본 저장은 브라우저 메모리 - 브라우저가 종료하면 자동으로 쿠키 제거

쿠키의 동작 과정

 

쿠키의 응답헤더와 요청헤더

 

  • Cookie(name, value): 쿠키 생성시 사용되는 생성자
  • response.addCookie(cookie): 생성된 쿠키를 응답처리
    ▶ 응답할 때
  • request.getCookies(): 클라이언트로부터 쿠키 정보를 배열로 리턴받음
    ▶ 요청할 때

 
※ 응답 처리에 따라 저장위치가 다름

 // 쿠키를 응답처리
c.setMaxAge(60*60); -> OS파일에 저장
response.addCookie(c); -> 브라우저 메모리에 저장

 

장단점

  • 세션: 보안에 강하다 / 서버의 부하가 증가한다
  • 쿠키: 서버의 부하는 줄여준다 / 보안에 약하다

 

ch04.2 요청, 포워딩, 리다이렉트

 
웹 개발 모델

모델2

  • 클라이언트의 요청 처리, 응답 처리, 비즈니스 로직 처리 부분을 모듈화한 구조
  • 5번 단계덕분에 MVC 가능
    JAVA에서 JSP로 페이지 이동하는 단계 (forward)

요청 포워딩

  • RequestDispatch 클래스를 이용한 forward 방법
RequestDispatcher dis = request.getRequestDispatcher(target);
dis.forward(request, response);

 

  • 지역변수, 전역변수
application scope (서버-전역변수) > session scope > request scope > page scope (지역변수)

 
리다이렉트

  • HttpServletResponse 클래스를 이용한 redirect 방법
response.sendRedirect(target);

  • Request scope이 서로 다름

 
 
CartSaveServlet

 // 세션객체 얻기
HttpSession session = request.getSession();
// get(속성을 가져올때)은 object를 받아오기 때문에 캐스팅 필요
ArrayList<String> list = (ArrayList<String>) session.getAttribute("product");