JSP

상태정보 유지

campanula 2023. 8. 1. 16:38

MVC 패턴의 Controller 역할로서 서블릿이 사용된다.

서블릿을 구현할 때 반드시 상속받아야하는 클래스: java.servlet.http.HttpServlet

 

포워드 기능: 하나의 서블릿에서 다른 서블릿이나 JSP와 연동하는 방법

포워드 기능이 사용되는 용도

요청에 대한 추가 작업을 다른 서블릿에게 수행하게함

요청에 포함된 정보를 다른 서블릿이나 JSP와 공유함

요청에 정보를 호함시켜 다른 서블릿에 전달할 수 있음

모델2 개발 시 서블릿에서 JSP로 데이터 전송에 사용

 

RequestDispatcher방법

일반적으로 포워딩 기능을 지칭

서블릿이 직접 요청하는 방법

RequestDispatcher클래스의 forward() 메서드 이용

 

dispatch를 이용한 포워딩: 서블릿에서 jsp로 데이터 전송을 할 때 주로 사용

클라이언트의 브라우저를 거치지 않고 서버에서 포워딩이 진행

클라이언트의 웹브라우저에서 첫번째 서블릿에 요청합니다.

첫 번째 서블릿은 RequestDispatcher를 이용해 두 번째 서블릿으로 포워드 합니다.

 

서블릿에서 다른 서블릿 또는jsp로 대량의 데이터를 공유하거나 전달하고 싶을 때 바인딩 기능을 사용한다.

데이터양이 적을 때는 get방식 이용

HttpServletRequest, HttpSession, ServletContext에서 사용. 저장된 자원을 프로그램 실행 시 서블릿이나 jsp에서 공유하여 사용

바인딩할 때 사용하는 메서드가 

setAttribute(String name, Object obj) : 데이터를 각 객체에 바인딩합니다.

getAttribute(String name): 각 객체에 바인딩된 정보를 name으로 가져옵니다. 반환형 Object=> 형변환 필요

removetAttribute(String name) : 각 객체에 바인딩된 자원을 name으로 제거합니다.

 

상태정보 유지

HTTP는 비연결성과 무상태로 동작하는 프로토콜이라서 이전 연결 때의 상태 정보를 서버가 유지해주지 않는다.

상태유지기술: 상태정보를 일정 시간 동안 지속해서 유지해주는 기술

필요성

HTTP의 비연결성을 보완

장바구니와 같이 여러 페이지로 이동하더라도 사용자 정보와 필요 정보 유지 필요

페이지 간의 지속성 서비스를 제공하기 위한 기법

hidden속성: html의 <input type="hidden" /> 태그를 이용하여 웹 페이지들 사이의 정보를 공유

GET 방식: GET 방식으로 URL 뒤에 정보를 붙여서 다른 페이지로 전송

쿠키: 클라이언트 PC(사용자 측에 정보 저장)의 Cookie 파일에 정보를 저장한 후 웹 페이지들이 공유

세션: 서버 메모리에 정보를 저장한 후 웹 페이지들이 공유, 자바의 모든 객체

 

쿠키 특징

정보가 클라이언트 PC에 저장됨

저장 정보 용량에 제한이 있음(파일 용량은 4kb)

보안이 취약함

클라이언트 브라우저에서 사용 유무를 설정할 수 있음

도메인당 쿠키가 만들어짐(웹사이트당 하나의 쿠키)

문자열 형태만 가능

 

1. 브라우저로 사이트에 접속

2. 서버는 정보를 저장한 쿠키 생성

3. 생성된 쿠키를 브라우저로 전송

4. 브라우저는 서버로부터 받은 쿠키 정보를 쿠키 파일에 저장

5. 브라우저가 다시 접속해 서버가 브라우저에게 쿠키 전성을 요청하면 브라우저는 쿠키 정보를 서버로

6. 서버는 쿠키 정보를 이용해 작업을 함.

 

Persistence 쿠키

파일로 생성, 쿠키를 삭제하거나 쿠키 설정 값이 종료된 경우, 최초 접속 시 서버로 전송, 로그인 유무 또는 팝업창을 제한할 때

Session 쿠키

브라우저 메모리에 생성, 브라우저를 종료한 경우, 최초 접속 시 서버로 전송되지 않음, 사이트 접속 시 Session 인증 정보

 

쿠키API 특징

javax.servlet.http.Cookie 사용(클래스)

HttpServletResponse의 addCookie()메서드를 이용해 클라이언트 브라우저에 쿠키를 전송한 후 저장

HttpServletRequest의 getCookie()메서드를 이용해 쿠키를 서버로 가져온다.

 

int getMaxAge(초단위): 쿠키의 최대지속 시간을 초단위로 반환 -1일 경우 브라우저가 종료되면 바로 쿠키도 만료되게 된다.

String getName(): 쿠키의 이름

 

쿠키 생성 

쿠키는 (이름, 값)의 쌍 정보를 입력하여 생성.

쿠키의 이름은 알파벳과 숫자로만 구성되고, 쿠키 값은 공백, 괄호, 등호, 콤마, 콜론, 세미콜론 등은 포함 불가능

Cookie cookie = new Cookie(name, value);

 

클라이언트의 컴퓨터에 파일 형태로 저장

내장객체 response의 addCookie메소드를 이용

response.addCookie(cookie)

 

세션

HttpSession: 인터페이스 타입, HttpServletRequest의 getSession()이나 getSession(true)메서드를 이용하여 생성할 수 있다.

HttpSession 객체가 생성될 때는 요청을 보내온 클라이언트 정보, 요청 시간 정보 등을 조합한 세션ID가 부여되며, 이 세션ID는 클라이언트 측에 쿠키 기술로 저장된다.

서버에 생성되며 클라이언트에는 세션ID(로그인을 하면 동일한 세션 ID를 사용 , 톰캣의 기본 값은 30분)가 쿠키 기술로 저장되어 각 클라이언트에 대하여 생성되는 HttpSession 객체를 클라이언트마다 개별적으로 유지 및 관리.

 

클라이언트가 서버에 요청하는 구조

1.요청

2.Session 객체 생성: getSession()

3.세션 ID와 상태 정보 저장

4.응답+세션ID

5.요청 + 세션ID

6.세션ID로 클라이언트와 연결 기능 유지