스펜서 개발블로그

#11. JSP&Sevlet - 세션(Session) 본문

Server/JSP & Servlet

#11. JSP&Sevlet - 세션(Session)

스펜서 2021. 4. 29. 00:49

세션(Session)

 

서버에 데이터를 저장하는 기술로 클라이언트(컴퓨터)에는 Session ID를 보여하고 클라이언트가 request에 세션 ID를 보내면,

ID를 기준으로 일치하는 세션 정보를 컨테이너가 생성하고 그 객체의 데이터를 가져와 사용한다.

만일 클라이언트가 보낸 세션 ID가 없으면 새로 객체를 생성한다.

 

 

세션 사용 방법

 

세션 객체 생성

세션 객체는 컨테이너가 자동으로 생성하여 request에 넣어주기 때문에, 생성된 객체를 불러오는 것이 생성이다.

객체를 생성할 때는 HttpSeesion 클래스와 .getSession() 메소드를 사용한다.

 

HttpRequest.getSession();

HttrpRequest.getSession(boolean값);   -   true: 객체 생성, false: null값 생성

 

 

세션 값 설정

.setAttribute(속성명(name)", "값(Value)"(Object type))으로 세션의 값을 설정해주고,

.setMaxInactiveInterval(숫자)로 세션 유지 시간을 설정한다.

 

 

세션 호출

HttpSession 세션명 = HttpSevletRequest.getSession();

세션명.getAttribute("속성명")  -  데이터를 불러온다.

 

 

세션 메소드

 

 

예제

index

페이지에서 성과 이름을 받아서 전송하고, 세션 데이터를 지우는 버튼을 만듬

 

 

SessionHandlingSevlet

Post방식으로 연결하여 session을 호출 및 설정한다.

 

HttpSession 클래스와 getSession() 메소드를 이용하여 세션을 호출하고,

seMaxInactiveInterval을 이용하여 세션의 유효시간(유지시간)을 설정한다.

(기본값(Default)은 30분이다.)

 

이렇게 설정해준 세션을 setAttribute() 메소드를 이용하여 담고,

sendRedirect를 이용하여 리다이렉트 시켜준다.

 

RedirectionServlet

리다이렉트 받은 세션 값을 getAttributeNames() 메소드를 이용하여 스트링(String) 타입의 Enumulation<> 인터페이스에 담고, 필요한 값을 뽑아 페이지에 표시한다.

 

세션에 담겨있는 값을 모두 담기 위하여 getAttributeNames() 메소드를 이용하여 스트링 타입의 Enumulation<> 인터페이스에 담고, while 반복문을 이용하여 요소를 출력하여 확인한다.

(hasMoreElements() 메소드를 사용하여 반복 횟수를 정하고, nextElement() 메소드를 사용하여 모든 요소(elements)를 뽑아낸다.)

 

페이지에 표시해주기 위하여 getAttribute로 필요한 값을 뽑아낸 뒤 String 타입으로 변환해주고, StringBuilder 클래스와 PrintWriter 클래스를 이용하여 text/html 타입에 utf-8 방식으로 인코딩 설정하여 응답한다.

(set.ContentType() 메소드는 콘텐트의 형식과 인코딩 타입을 설정해준다.)

 

 

DeleteSessionDataSevlet

세션의 속성을 지우거나 세션을 무효화(삭제) 하는 기능을 작성하였다.

 

결과 구분 2에서는 removeAttribute() 메소드를 사용하여 입력 받은 이름(firstName)을 삭제하였고,

결과 구분 3에서는 invalidate() 메소드를 사용하여 세션을 만료시켜버렸다.

단, 세션을 만료시킨 경우에는 console에서 에러가 발생하고, 페이지를 찾을 수 없게 된다.

 

Comments