romworld

Session 본문

JAVA/개념정리

Session

inderrom 2022. 12. 6. 03:27

sessionTest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session 연습</title>
</head>
<body>

<a href="<%=request.getContextPath() %>/sessionAdd.do">Session 정보 저장하기</a><br><br>
<a href="<%=request.getContextPath() %>/sessionRead.do">Session 정보 확인하기</a><br><br>
<a href="<%=request.getContextPath() %>/sessionDelete.do">Session 정보 삭제하기</a><br><br>


</body>
</html>

SessionAdd

package kr.or.ddit.basic.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("/sessionAdd.do")
public class SessionAdd extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Session 저장하는 방법
		
		// 1. Session객체를 생성하거나 현재의 Session 가져오기
		// 형식1) request객체.getSession(); 또는 request객체.getSession(true);
		//		==> 현재 세션이 존재하면 현재 세션을 반환하고, 
		//          세션이 존재하지 않으면 새로운 세션을 생성해서 반환한다.
		
		// 형식2) request객체.getSession(false);
	    //	    ==> 현재 세션이 존재하면 현재 세션을 반환하고,
		//          세션이 존재하지 않으면 새로운 세션을 생성하지 않고 null을 반환한다.
		HttpSession session = request.getSession();
		
		// 2. 구해진 Session에 데이터 저장하기
		// 형식) session객체.setAttribute("key값",저장할데이터값;);
		//		 ==> key값 : String, '저장할데이터값' : 자바의 모든 자료형
		session.setAttribute("testSession", "연습용 세션입니다.");
		session.setAttribute("username", "홍길동");
		session.setAttribute("age", 30);
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf8");
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><meta charset=utf-8><title>Session 연습</title></head>");
		out.println("<body>");

		out.println("<h3>Session 데이터를 저장했습니다</h3>");
		out.println("<a href='" +  request.getContextPath() 
								+ "/basic/session/sessionTest.jsp'>시작문서로 이동하기</a>");
		
		out.println("</body></html>");
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

SessionRead

package kr.or.ddit.basic.session;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

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("/sessionRead.do")
public class SessionRead extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 저장된 Session 읽어오기
		
		// 1. Session객체를 생성하거나 현재의 Session 가져오기
		HttpSession session = request.getSession();
		
		// 2. Session에 저장된 데이터 가져오기 ==> getAttribute()메서드 이용
		// 형식) session객체.getAttribute("key값");
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf8");
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><meta charset=utf-8><title>Session 연습</title></head>");
		out.println("<body>");
		
		out.println("<h3>세션 데이터 1개 가져오기</h3>");
		out.println("- testSession의 세션값 : ");
		String sessionValue = (String)session.getAttribute("testSession"); // 변수에 저장하려면 형변환을 하고 저장해라
		
		if(sessionValue==null) {
			out.println("세션값이 없습니다.");
		}else {
			out.println(sessionValue);
		}
		out.println("<br><hr><br>");
		
		out.println("<h3>전체 세션 데이터 확인하기</h3>");
		
		Enumeration<String> sessionKeys = session.getAttributeNames(); // 세션의 모든 key값 가져오기
		int cnt = 0;
		
		out.println("<ul>");
		while(sessionKeys.hasMoreElements()) {  // 가져올 데이터가 있는지 검사
			cnt++;
			String key = sessionKeys.nextElement();  // key값 1개 가져오기
			out.println("<li>" + key + " : " + session.getAttribute(key) + "</li>");
			
		}
		
		if(cnt==0) out.println("<li> 세션 데이터가 하나도 없습니다.</li>");
		
		out.println("</ul>");
		out.println("<hr>");
		
		out.println("<a href='" +  request.getContextPath() 
		+ "/basic/session/sessionTest.jsp'>시작문서로 이동하기</a>");
		
		out.println("</body></html>");
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

SessionDelete

package kr.or.ddit.basic.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("/sessionDelete.do")
public class SessionDelete extends HttpServlet {
	private static final long serialVersionUID = 1L;


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Session 삭제하기
		
		//1. Session객체 생성 및 현재 세션 가져오기
		HttpSession session = request.getSession();
		
		// 2. Session 정보 삭제하기
		
		// 2-1. session객체변수.removeAttribute("Key값")메서드로 삭제하기
		//	  ==> 세션 자체는 삭제되지 않고 개별적인 세션값(지정한 key값에 해당하는 세션값)만 삭제한다.
		//session.removeAttribute("testSession");
		
		//2-2. session객체변수.invalidate()메서드로 삭제하기
		//     --> 세션 자체를 삭제한다.
		session.invalidate();
		
		
		//----------------------------------------------------------------------------
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf8");
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><meta charset=utf-8><title>Session 연습</title></head>");
		out.println("<body>");

		out.println("<h3>Session 데이터를 삭제했습니다</h3>");
		out.println("<a href='" +  request.getContextPath() 
								+ "/basic/session/sessionTest.jsp'>시작문서로 이동하기</a>");
		
		out.println("</body></html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

로그인 화면 구성하기

 

 

sessionLogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
<style type="text/css">
table{
	margin:10px auto;
}
</style>
</head>
<body>
<%	
	//JSP문서에서 세션은 'session'이라는 이름으로 저장되어 있다.
	
	String userID = (String) session.getAttribute("USERID");
	
%>

<%
if(userID==null){	// 세션값이 null이면 로그인이 안된 상태이다...
%>


<form action="<%=request.getContextPath() %>/sessionLogin.do" method="post">
<table border="1">
<tr>
	<td>ID : </td>
	<td><input type="text" name="userid" placeholder="ID를 입력하세요"></td>
</tr>
<tr>
	<td>PASS : </td>
	<td><input type="password" name="pass" placeholder="Password를 입력하세요."></td>
</tr>
<tr>
	<td colspan="2" style="text-align:center">
		<input type="submit" value="Login">
	</td>
</tr>
</table>
</form>
<%
}else{
%>
  
<h3> 관리자님 반갑습니다.</h3>
<a href="<%=request.getContextPath() %>/sessionLogout.do">로그아웃</a>

<%
}
%>
</body>
</html>

SessionLogin

package kr.or.ddit.basic.session;

import java.io.IOException;
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;
import javax.websocket.SendResult;

@WebServlet("/sessionLogin.do")
public class SessionLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		
		HttpSession session = request.getSession();
		
		
		// 입력한 회원ID와 패스워드를 받아온다.
		String userID = request.getParameter("userid"); //id 값
		String pass = request.getParameter("pass"); //password값
		
		if("admin".equals(userID) && "1234".equals(pass)) { //로그인 성공
			session.setAttribute("USERID", userID);   // 세션의 정보 저장
			
		}
		
		response.sendRedirect(
				request.getContextPath() + "/basic/session/sessionLogin.jsp");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

SessionLogout

package kr.or.ddit.basic.session;

import java.io.IOException;

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("/sessionLogout.do")
public class SessionLogout extends HttpServlet {
	private static final long serialVersionUID = 1L;


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 로그아웃 기능은 세션을 삭제한 후 페이지를 이동하면 된다.
		
		HttpSession session = request.getSession();
		
		session.invalidate();
		
		response.sendRedirect(
				request.getContextPath() + "/basic/session/sessionLogin.jsp");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

DB이용해서 로그인

 

sessionDBLogin.jsp

<%@page import="kr.or.ddit.vo.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
<style type="text/css">
table{
	margin:10px auto;
}
</style>
</head>
<body>
<%	
	//JSP문서에서 세션은 'session'이라는 이름으로 저장되어 있다.
	
	MemberVO memVo = (MemberVO) session.getAttribute("loginMember");
	
%>

<%
if(memVo==null){	// 세션값이 null이면 로그인이 안된 상태이다...
%>


<form action="<%=request.getContextPath() %>/sessionDBLogin.do" method="post">
<table border="1">
<tr>
	<td>ID : </td>
	<td><input type="text" name="userid" placeholder="ID를 입력하세요"></td>
</tr>
<tr>
	<td>PASS : </td>
	<td><input type="password" name="pass" placeholder="Password를 입력하세요."></td>
</tr>
<tr>
	<td colspan="2" style="text-align:center">
		<input type="submit" value="Login">
	</td>
</tr>
</table>
</form>
<%
}else{
%>
  
<h3> <%=memVo.getMem_name() %>님 반갑습니다.</h3>
<a href="<%=request.getContextPath() %>/sessionDBLogout.do">로그아웃</a>

<%
}
%>
</body>
</html>

SessionDBLogin

package kr.or.ddit.basic.session;

import java.io.IOException;
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;

import kr.or.ddit.vo.MemberVO;


@WebServlet("/sessionDBLogin.do")
public class SessionDBLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		
		HttpSession session = request.getSession();
		
		
		// 입력한 회원ID와 패스워드를 받아온다.
		String userID = request.getParameter("userid"); //id 값
		String pass = request.getParameter("pass"); //password값
		
		// MemberVO객체 생성 후 입력받은 데이터를 셋팅한다.
		MemberVO memVo = new MemberVO();
		memVo.setMem_id(userID);
		memVo.setMem_pass(pass);
		
		// DAO객체 생성
		MemberDao memDao = new MemberDao();
		
		// DAO를 이용하여 회원ID와 Password가 일치하는 회원 정보 가져오기
		MemberVO loginMemVo = memDao.getMember(memVo);
		
		if(loginMemVo !=null) {  // 로그인 성공
			// 로그인한 회원의 전체 정보가 저장된 VO객체를 세션에 저장한다.
			session.setAttribute("loginMember", loginMemVo);  // 객체를 저장할 수 있다
			
		}
		
		response.sendRedirect(
				request.getContextPath() + "/basic/session/sessionDBLogin.jsp");
		
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

SessionDBLogout

package kr.or.ddit.basic.session;

import java.io.IOException;

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("/sessionDBLogout.do")
public class SessionDBLogout extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 로그아웃 기능은 세션을 삭제한 후 페이지를 이동하면 된다.
		
		HttpSession session = request.getSession();
		
		session.invalidate();
		
		response.sendRedirect(
				request.getContextPath() + "/basic/session/sessionDBLogin.jsp");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

MemberDao

package kr.or.ddit.basic.session;

import java.sql.SQLException;

import com.ibatis.sqlmap.client.SqlMapClient;

import kr.or.ddit.util.SqlMapClientFactory;
import kr.or.ddit.vo.MemberVO;

public class MemberDao {
	private SqlMapClient smc;
	
	// 생성자
	public MemberDao() {
		smc = SqlMapClientFactory.getSqlMapClient();
	}
	
	public MemberVO getMember(MemberVO memVo) {
		MemberVO loginMemVo = null; // 반환값이 저장될 변수
		
		try {
			loginMemVo = (MemberVO) smc.queryForObject("member.getMember", memVo);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return loginMemVo;
	}
	
}

 

'JAVA > 개념정리' 카테고리의 다른 글

File Upload  (0) 2022.12.06
Ajax ( JSON)  (1) 2022.12.06
Cookie 2 ( login)  (0) 2022.12.06
Cookie  (0) 2022.12.06
Servlet 3 ( request, response, forward,redirect)  (1) 2022.12.06
Comments