[Servlet 4-2] Session Servlet

임승현·2022년 12월 1일
0

Servlet

목록 보기
10/14

◈ 세션(Session) : 서버(윕프로그램)와 클라이언트(브라우저)의 연결 지속성을 제공하기 위해 서버에 저장되는 값
→ 보안 관련 정보(권한)를 저장할 목적으로 사용
→ 세션 아이디(식별자)를 이용하여 클라이언트를 구분해 세션에 필요한 값(객체)을 저장하여 사용
※ 문자값만 저장 가능한 쿠키랑은 다름
◈ 세션 바인딩(Session Binding) : 세션을 웹프로그램에서 사용할 수 있도록 결합하는 작업 - WAS가 알아서 해줌
◈ 클라이언트에서 [JSESSIONID] 이름의 쿠키를 제공하지 않을 경우 새로운 세션을 생성하여 바인딩 처리
→ 생성된 세션의 아이디(식별자)를 [JSESSIONID] 이름의 쿠키값으로 저장하여 클라이언트에게 전달
→ 서버로부터 전달받은 [JSESSIONID] 쿠키를 클라이언트는 브라우저 메모리에 저장 - 브라우저가 종료되면 소멸
◈ 클라이언트에서 [JSESSIONID] 이름의 쿠키를 제공받은 경우 세션 트렉킹하여 바인딩 처리
◈ 세션 트랙킹(Session Tracking) : [JSESSIONID] 이름의 쿠키값을 서버에 저장된 세션의 아이디와 비교하여 검색하는 작업

🐧세션을 바인딩하여 클라이언트에게 바인딩된 세션 정보를 전달하는 서블릿

📌 HttpServletRequest.getSession() : 바인딩 처리된 세션(HttpSession 객체)을 반환하는 메소드
→ 새로운 세션을 생성하여 바인딩하거나 기존 세션을 트렉킹하여 바인딩 처리
📌 HttpSession 객체 : 세션 관련 정보를 저장한 객체
→ 연결 지속성을 제공하기 위한 값(객체)을 Map 형식(이름과 값을 하나의 요소로 표현)으로 저장

HttpSession session=request.getSession();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>세션(Session)</h1>");
out.println("<hr>");

📌 HttpSession.isNew() : 세션을 트렉킹하여 바인딩된 경우 [false]를 반환하고 세션을 생성하여 바인딩된 경우 [true]를 반환하는 메소드

if(session.isNew()) {
	out.println("<p>세션을 생성하여 바인딩 하였습니다.</p>");
} else {
	out.println("<p>세션을 트렉킹하여 바인딩 하였습니다.</p>");	
}

📌 HttpSession.getId() : 세션을 구분하기 위한 식별자(세션 아이디)를 반환하는 메소드

out.println("<p>세션 아이디 = "+session.getId()+"</p>");

📌 HttpSession.getMaxInactiveInterval() : 바인딩된 세션 유지시간(초)을 반환하는 메소드
→ 기본적으로 세션의 유지시간은 1800초(30분)로 설정

out.println("<p>세션 유지시간 = "+session.getMaxInactiveInterval()+"초</p>");

🌟 HttpSession.setAttribute(String attributeName, object attributeValue)
→ 바인딩 세션에 속성명(문자열)과 속성값(객체)을 저장(변경)하는 메소드
→ 기존 세션에 저장된 값과 같은 이름의 속성명을 사용한 경우 속성값 변경
→ 연결 지속성을 제공하기 위한 정보를 이름과 값의 엔트리(Entry) 형식으로 저장
◈ 동일한 세션을 바인딩한 모든 웹프로그램에서 속성명으로 속성값을 제공받아 사용 가능
→ 하나의 클라이언트는 세션을 통해 모든 웹프로그램에서 객체를 공유하여 사용 가능

session.setAttribute("now", new Date());

※ 다른 웹프로그램에서 객체를 사용할 수 있도록 공유(now라는 이름으로 Date 객체를 저장)

🌟 HttpSession.getAttribute(String attributeName) : 바인딩된 세션에 저장된 속성값을 속성명을 전달받아 반환하는 메소드
→ 세션에 저장된 속성값을 Object 타입으로 반환하므로 반드시 명시적 객체 형변환 후 사용
→ 매개변수로 전달받은 속성명의 속성값이 없는 경우 null 반환

Date now=(Date)session.getAttribute("now");
out.println("<p>세션으로부터 제공받은 객체 = "+now+"</p>");

🌟 HttpSession.removeAttribute(String attributeName) : 바인딩된 세션에 저장된 속성값을 속성명을 전달받아 삭제하는 메소드

session.removeAttribute("now");

📌 HttpSession.invalidate() : 바인딩된 세션의 결합을 해제하는 메소드
→ 세션의 언바인딩(UnBinding) 처리 - 세션 소멸

session.invalidate();

📃SessionServlet.java

package xyz.itwill.servlet;
//
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
//
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//
//세션(Session) : 서버(윕프로그램)와 클라이언트(브라우저)의 연결 지속성을 제공하기 위해 서버에 저장되는 값
//→ 보안 관련 정보(권한)를 저장할 목적으로 사용
//→ 세션 아이디(식별자)를 이용하여 클라이언트를 구분해 세션에 필요한 값(객체)을 저장하여 사용
//※ 문자값만 저장 가능한 쿠키랑은 다름
//세션 바인딩(Session Binding) : 세션을 웹프로그램에서 사용할 수 있도록 결합하는 작업 - WAS가 알아서 해줌
//클라이언트에서 [JSESSIONID] 이름의 쿠키를 제공하지 않을 경우 새로운 세션을 생성하여 바인딩 처리
//→ 생성된 세션의 아이디(식별자)를 [JSESSIONID] 이름의 쿠키값으로 저장하여 클라이언트에게 전달
//→ 서버로부터  전달받은 [JSESSIONID] 쿠키를 클라이언트는 브라우저 메모리에 저장 - 브라우저가 종료되면 소멸
//클라이언트에서 [JSESSIONID] 이름의 쿠키를 제공받은 경우 세션 트렉킹하여 바인딩 처리
//세션 트랙킹(Session Tracking) : [JSESSIONID] 이름의 쿠키값을 서버에 저장된 세션의 아이디와 비교하여 검색하는 작업 
//
//세션을 바인딩하여 클라이언트에게 바인딩된 세션 정보를 전달하는 서블릿
@WebServlet("/session.itwill")
public class SessionServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	//
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		//
		//HttpServletRequest.getSession() : 바인딩 처리된 세션(HttpSession 객체)을 반환하는 메소드
		//→ 새로운 세션을 생성하여 바인딩하거나 기존 세션을 트렉킹하여 바인딩 처리
		//HttpSession 객체 : 세션 관련 정보를 저장한 객체
		//→ 연결 지속성을 제공하기 위한 값(객체)을 Map 형식(이름과 값을 하나의 요소로 표현)으로 저장
		HttpSession session=request.getSession();
		//
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='UTF-8'>");
		out.println("<title>Servlet</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>세션(Session)</h1>");
		out.println("<hr>");
		//HttpSession.isNew() : 세션을 트렉킹하여 바인딩된 경우 [false]를 반환하고 세션을 생성하여 바인딩된 경우 [true]를 반환하는 메소드
		if(session.isNew()) {
			out.println("<p>세션을 생성하여 바인딩 하였습니다.</p>");
		} else {
			out.println("<p>세션을 트렉킹하여 바인딩 하였습니다.</p>");	
		}
		//
		//HttpSession.getId() : 세션을 구분하기 위한 식별자(세션 아이디)를 반환하는 메소드
		out.println("<p>세션 아이디 = "+session.getId()+"</p>");	
		//
		//HttpSession.getMaxInactiveInterval() : 바인딩된 세션 유지시간(초)을 반환하는 메소드
		//→ 기본적으로 세션의 유지시간은 1800초(30분)로 설정
		out.println("<p>세션 유지시간 = "+session.getMaxInactiveInterval()+"초</p>");
		//
		//★HttpSession.setAttribute(String attributeName, object attributeValue)
		//→ 바인딩 세션에 속성명(문자열)과 속성값(객체)을 저장(변경)하는 메소드
		//→ 기존 세션에 저장된 값과 같은 이름의 속성명을 사용한 경우 속성값 변경
		//→ 연결 지속성을 제공하기 위한 정보를 이름과 값의 엔트리(Entry) 형식으로 저장
		//동일한 세션을 바인딩한 모든 웹프로그램에서 속성명으로 속성값을 제공받아 사용 가능
		//→ 하나의 클라이언트는 세션을 통해 모든 웹프로그램에서 객체를 공유하여 사용 가능
		session.setAttribute("now", new Date());//다른 웹프로그램에서 객체를 사용할 수 있도록 공유(now라는 이름으로 Date 객체를 저장)
		//
		//★HttpSession.getAttribute(String attributeName) : 바인딩된 세션에 저장된 속성값을 속성명을 전달받아 반환하는 메소드
		//→ 세션에 저장된 속성값을 Object 타입으로 반환하므로 반드시 명시적 객체 형변환 후 사용
		//→ 매개변수로 전달받은 속성명의 속성값이 없는 경우 null 반환
		Date now=(Date)session.getAttribute("now");
		out.println("<p>세션으로부터 제공받은 객체 = "+now+"</p>");
		//
		//★HttpSession.removeAttribute(String attributeName) : 바인딩된 세션에 저장된 속성값을 속성명을 전달받아 삭제하는 메소드
		session.removeAttribute("now");
		//
		//HttpSession.invalidate() : 바인딩된 세션의 결합을 해제하는 메소드
		//→ 세션의 언바인딩(UnBinding) 처리 - 세션 소멸
		session.invalidate();
		//
		out.println("</body>");
		out.println("</html>");
	}
}

0개의 댓글