관리 메뉴

거니의 velog

231002_Servlet 4 본문

대덕인재개발원_자바기반 애플리케이션

231002_Servlet 4

Unlimited00 2023. 9. 27. 17:21

cookieLogin.jsp 문서의 'id 체크하기' 체크박스를 체크한 후 'Login'버튼을 클릭하면
입력했던 'ID'를 쿠키에 저장하고, 쿠키에 'ID'값이 저장되어 있으면 'ID'가 나타나도록 한다.
이 때 체크박스도 체크가 된 상태로 유지되도록 한다.

체크박스를 해제한 후 로그인을 하면 쿠키에 저장된 'ID'를 삭제하고 체크 박스도 해제된 
상태가 되도록 한다.

ID가 'test'이고 PassWord가 '1234'이면 로그인에 성공한 것으로 보고 'cookieMain.jsp'로 
이동하고 그렇지 않으면 'cookieLogin.jsp'로 이동되도록 한다.

[cookieMain.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="UTF-8" />
		<title>Cookie 연습 1</title>
	</head>
	<body>
		<h2>cookie연습용 main페이지입니다.</h2>
		<br />
		<a href="<%= request.getContextPath() %>/basic/cookie/cookieLogin.jsp">Login 창으로 이동</a>
	</body>
</html>

[cookieLogin.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	<body>	<!-- 쿠키값으로 id정보 받아오기 -->
		<%
		String cookie = "";			
		Cookie[] cookies = request.getCookies();
		if (cookies != null && cookies.length > 0) {
			for (int i = 0; i < cookies.length; i++) {
				if (cookies[i].getName().equals("userId")) {
					cookie = cookies[i].getValue();
				}
			}
		}
		%>
		<form action="<%= request.getContextPath() %>/cookieLoginServlet.do" method="post">
			ID : <input name="id" type=text value="<%= cookie %>"
			placeholder="ID 입력하세요."><br> 
			PASS : <input name="pass" type=password placeholder="PassWord 입력하세요."><br>
			<input name="checkbox" type=checkbox> id 기억하기 <br> 
			<input type="submit" value="Login">
		</form>
	</body>
</html>

[CookieLoginServlet.java]

package kr.or.ddit.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


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

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// id, pass, checkbox 정보 받아오기
		String id = request.getParameter("id"); // id 가져오기
		String pass = request.getParameter("pass"); // pass 가져오기
		String checkbox = request.getParameter("checkbox");// 체크박스의 체크여부 가져오기
		
		Cookie cookie = new Cookie("userId", id);// userId라는 쿠키를 생성한다.

		//System.out.println(checkbox); // 체크여부 확인
		if (checkbox != null) { // 체크박스 체크여부에 따라 쿠키 저장 확인
			// 체크박스 체크 되었을 때 쿠키 저장
			response.addCookie(cookie);
		}else {
			// 체크박스 체크 해제되었을 때 쿠키 유효시간 0으로 해서 브라우저에서 삭제하게 한다.
			cookie.setMaxAge(0);
			response.addCookie(cookie);
		}
		
		// id , pass 에 null 체크 반드시 하기
		if (id != null && !id.isEmpty() && pass != null && !pass.isEmpty()) {
			if (id.equals("test") && pass.equals("1234")) { // 로그인 성공시
				// id 와 pwd가 일치하는 경우...
				response.sendRedirect(request.getContextPath() + "/basic/cookie/cookieMain.jsp");
			} else { // 로그인 실패시
				// 로그인 실패시 바로 login 화면으로...
				response.sendRedirect(request.getContextPath() + "/basic/cookie/cookieLogin.jsp");
			}
		} 
	}

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

}


[선생님 풀이]

[cookieMain.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="UTF-8" />
		<title>Cookie 연습 1</title>
	</head>
	<body>
		<h2>cookie연습용 main페이지입니다.</h2>
		<br />
		<a href="<%= request.getContextPath() %>/basic/cookie/cookieLogin.jsp">Login 창으로 이동</a>
	</body>
</html>

[cookieLogin.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<form action="<%= request.getContextPath() %>/cookieLoginServlet.do" method="post">
			<table style="margin: auto;">
				<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">
						<input type="checkbox" name="chkid" value="check" /> id 기억하기
					</td>
				</tr>
				<tr>
					<td colspan="2" style="text-align: center;">
						<input type="submit" value="Login" />
					</td>
				</tr>
			</table>
		</form>
	</body>
</html>

[CookieLogin.java]

package kr.or.ddit.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


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

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		// userid, pass, chkid 파라미터의 값을 구한다.
		String userId = request.getParameter("userid");
		String pass = request.getParameter("pass");
		String chkId = request.getParameter("chkid"); // checkbox의 값
		
		// userid값을 갖는 Cookie객체 생성
		Cookie loginCookie = new Cookie("USERID", userId);
		
		//CheckBox의 체크 여부 : check
		//CheckBox의 체크 여부 : null
		System.out.println("CheckBox의 체크 여부 : " + chkId);
		
		if(chkId == null) { // 체크박스가 체크되지 않으면...
			loginCookie.setMaxAge(0); // Cookie를 삭제하기 위해서 유지시간을 0으로 설정
		}
		
		// 쿠키를 다시 저장한다.
		response.addCookie(loginCookie);
		
		String contextPath = request.getContextPath();
		
		if("test".equals(userId) && "1234".equals(pass)) { // 로그인 성공 시
			response.sendRedirect(contextPath + "/basic/cookie/cookieMain.jsp");
		}else { // 로그인 실패 시
			response.sendRedirect(contextPath + "/basic/cookie/cookieLogin.jsp");
		}
	}

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

}

[cookieMain.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
		<% 
			// 쿠키에 저장된 ID값을 구한다.
			String cookieUserId = "";
			String chkBox = "";
		
			Cookie[] cookieArr = request.getCookies();
			if(cookieArr != null) {
				for(Cookie cookie : cookieArr) {
					if("USERID".equals(cookie.getName())) { // 원하는 쿠키이름을 찾는다.
						cookieUserId = cookie.getValue(); // 쿠키값을 저장한다.
						chkBox = "checked";
					}
				}
			}
		%>
	</head>
	<body>
		<form action="<%= request.getContextPath() %>/cookieLoginServlet.do" method="post">
			<table style="margin: auto;">
				<tr>
					<td>ID : </td>
					<td><input type="text" name="userid" placeholder="ID를 입력하세요." value="<%= cookieUserId %>" /></td>
				</tr>
				<tr>
					<td>PASS : </td>
					<td><input type="password" name="pass" placeholder="PassWord 입력하세요."></td>
				</tr>
				<tr>
					<td colspan="2">
						<input type="checkbox" name="chkid" value="check" <%= chkBox %> /> id 기억하기
					</td>
				</tr>
				<tr>
					<td colspan="2" style="text-align: center;">
						<input type="submit" value="Login" />
					</td>
				</tr>
			</table>
		</form>
	</body>
</html>


[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.java]

package kr.or.ddit.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객체를 생성하거나 현재 세션 가져오기
		// 형식1) Request객체.getSession(); 또는 Request객체.getSession(true);
		//		==> 현재 세션이 존재하면 현재 세션을 반환하고,
		//			세션이 존재하지 않으면 새로운 세션을 생성하여 반환한다.
		// 형식2) Request객체.getSession(false);
		//		==> 현재 세션이 존재하면 현재 세션을 반환하고,
		//			세션이 존재하지 않으면 null을 반환한다.
		
		HttpSession session = request.getSession();
		
		// 2. Session객체의 setAttribute()메서드를 이용하여 세션값을 저장한다.
		// 형식) Session객체.setAttribute("key값", session값);
		//		==> 'key값'은 문자열, 'session값'은 자바의 모든 자료형 사용 가능
		
		session.setAttribute("testSession", "연습용 세션입니다.");
		session.setAttribute("userName", "홍길동");
		session.setAttribute("age", 30);
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<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>");
		out.println("</html>");
	}

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

}

[SessionRead.java]

package kr.or.ddit.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 {
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		// 저장된  Session값 읽어오기
		
		// 1. Session객체를 생성하거나 현재 세션 가져오기
		HttpSession session = request.getSession();
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8' /><title>Session 읽기</title></head>");
		out.println("<body>");
		
		out.println("<h3>저장된 Session값 확인하기</h3>");
		
		// 2. Session값 가져오기 ==> getAttribute()메서드 이용
		// 형식) Session객체.getAttribute("key값");
		out.println("<h3>Session값 1개 확인하기</h3>");
		String sessionValue = (String) session.getAttribute("testSession");
		if(sessionValue == null) {
			out.println("<h3>세션의 key값이 'testSession'인 세션 정보는 없습니다.</h3>");
		}else {
			out.println("<h4>testSession의 세션값 : " + sessionValue + "</h4>");
		}
		
		out.println("<br /><hr /><br />");
		
		out.println("<h3>전체 세션 데이터 확인하기</h3>");
		out.println("<ol>");
		
		// 세션 전체의 세션이름(key값) 가져오기
		Enumeration<String> sessionKeys = session.getAttributeNames();
		int cnt = 0;
		while(sessionKeys.hasMoreElements()) {
			cnt++;
			String sessionKey = sessionKeys.nextElement();
			out.println("<li>"+ sessionKey +" : "+ session.getAttribute(sessionKey) +"</li>");
		}
		
		if(cnt == 0) out.println("<li>세션이 하나도 없습니다.</li>");
		
		out.println("</ol>");
		
		out.println("<br /><hr /><br />");
		
		out.println("<h3>세션 관련 정보</h3>");
		
		// 세션ID ==> 세션을 구분하기 위한 고유한 값
		out.println("세션 ID : " + session.getId() + "<br /><br />");
		
		// 생성시간 ==> 1970년 1월 1일부터 경과한 시간(밀리세컨드 단위)
		out.println("세션 생성 시간 : " + session.getCreationTime() + "<br /><br />");
		
		// 가장 최근 세션에 접근한 시간 ==> 1970년 1월 1일부터 경과한 시간(밀리세컨드 단위)
		out.println("세션 최근 접근 시간 : " + session.getLastAccessedTime() + "<br /><br />");
		
		// 세션의 유효시간 ==> (초 단위)
		// 유효시간의 설정은 Session객체.setMaxInactiveInterval(설정시간); 으로 설정할 수 있다.
		out.println("세션 유효 시간 : " + session.getMaxInactiveInterval() + "<br /><br />");
		
		out.println("<br /><hr /><br />");
		out.println("<a href='"+ request.getContextPath() +"/basic/session/sessionTest.jsp'>시작문서로 이동</a>");
		
		out.println("</body>");
		out.println("</html>");
	}

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

}

- http://localhost:8090/webTest/basic/session/sessionTest.jsp


[SessionDelete.java]

package kr.or.ddit.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-1. 개별적인 Session값 삭제하기
		// 형식) Session객체.removeAttribute("key값");
		//		==> 세션 자체는 삭제되지 않고 개별적인 세션값만 삭제된다.
		session.removeAttribute("testSession");
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<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>");
		out.println("</html>");
	}

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

}

- http://localhost:8090/webTest/basic/session/sessionTest.jsp


[SessionDelete.java]

package kr.or.ddit.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-1. 개별적인 Session값 삭제하기
		// 형식) Session객체.removeAttribute("key값");
		//		==> 세션 자체는 삭제되지 않고 개별적인 세션값만 삭제된다.
		//session.removeAttribute("testSession");
		
		// 2-2. 세션 자체를 삭제하기
		// 형식) Session객체.invalidate();
		session.invalidate();
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<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>");
		out.println("</html>");
	}

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

}

- http://localhost:8090/webTest/basic/session/sessionTest.jsp


 

'대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글

231004_유스케이스 다이어그램 작성  (0) 2023.10.04
231004_Servlet 5  (0) 2023.10.02
230927_Servlet 3  (2) 2023.09.27
230926_Servlet 2  (0) 2023.09.26
230925_Servlet 1  (0) 2023.09.25