본문 바로가기

Servlet & JSP

Servlet & JSP에서 Session 사용법

docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSession.html

 

HttpSession (Java(TM) EE 7 Specification APIs)

Provides a way to identify a user across more than one page request or visit to a Web site and to store information about that user. The servlet container uses this interface to create a session between an HTTP client and an HTTP server. The session persis

docs.oracle.com

 

 

 

 

세션 생성 

개발자가 직접 수동으로 생성하는 것이 아니라, 메소드를 이용하여 생성하거나,

기존의 HttpSession 객체의 주솟값을 추출하여 사용.

 

세션 생성

javax.servlet.http.HttpSession을 import한 상태에서 HttpServletRequestgetSession()을 사용

클라이언트가 가지고 있는 ID와 동일한 세션 객체를 찾아서 주솟값 반환.

만일 세션이 존재하지 않으면 새로운 HttpSession 객체를 생성하여 반환.

매개변수에 true값을 넣으면 동일하게 객체 생성, false값을 넣으면 null 반환

 

세션 메소드는 위 오라클에 자세히 종류별로 설명이 되어있음.

 

예시1

 

package com.edu.test.session;

import java.io.IOException;
import java.io.PrintWriter;

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;

@WebServlet("/session1")
public class SessionTestServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter out = resp.getWriter();
		
		String param = req.getParameter("p");
		String msg = null;
		
		//new를 하지 않는 이유 : req.getSession으로 이미 만들어져있는 session의 주소값을 참조형 변수로 받기 위해서
		HttpSession session = null;
		
		if(param.equals("create")) {
			session = req.getSession(); // 세션이 없는 경우 새로 생성 true 인자값을 받는 것과 같음
			if(session.isNew()) {
				msg = "새로운 세션 객체가 생성됨";
			}
			else {
				msg = "기존의 세션 객체가 생성됨";
			}
		}
		else if(param.equals("delete")) {
			session = req.getSession(false); // 세션이 없는 경우 null 반환
			if(session != null) {
				session.invalidate();	// 삭제 메소드
				msg = "세션 객체 삭제 작업 완료";
			}
			else {
				msg = "삭제할 세션 존재하지 않음";
			}
		}
		else if(param.equals("add")) {
			session = req.getSession(true); // 세션이 없는 경우 새로 생성 인자값을 받지 않는 것과 같음
			session.setAttribute("msg", "메시지입니다.");
			msg = "세션 객체에 데이터 등록 완료";
		}
		else if(param.equals("get")) {
			session = req.getSession(false); 	// 세션이 없는 경우 null 반환
			if(session != null) {
				String str = (String)session.getAttribute("msg");
				msg = str;		//msg에 등록된 속성 값을 msg에 대입
			}
			else {
				msg = "데이터를 추출할 세션 객체가 존재하지 않음";
			}
		}
		else if(param.equals("remove")) {
			session = req.getSession(false); // 세션이 없는 경우 null 반환
			if(session != null) {
				session.removeAttribute("msg");
				msg = "세션 객체의 데이터 삭제 작업 완료";
			}
			else {
				msg = "데이터를 삭제할 세션 객체 존재하지 않음";
			}
		}
		else if(param.equals("replace")) {
			session = req.getSession(); 		// 세션이 없는 경우 새로 생성 인자값을 받지 않는 것과 같음
			session.setAttribute("msg", "새로운 메시지입니다.");	//msg 이름 속성값 등록
			msg = "세션 객체에 데이터 등록 추가 완료";
		}
		
		out.print("처리 결과: " + msg);
		out.close();
	}
}