출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

CookieBox.java

package util;

import java.io.IOException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

// 쿠키 객체를 생성하고 저장하고, 저장된 쿠키를  꺼내쓰는 기능
public class CookieBox {
	
	// Cookie 객체를 저장하는 Map 객체를 생성
	  Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
	
	// 초기화 : cookieMap에 cookie 데이터를 저장
	// 생성자 :
	public CookieBox(HttpServletRequest request) {
		// request를 통해 cookie 정보를 얻을 수 있다.
		Cookie[] cookies = request.getCookies();
		
		if(cookies!=null && cookies.length>0) {
			for(int i=0; i<cookies.length; i++) {
				// cookieMp에 Cookie 객체를 저장
				cookieMap.put(cookies[i].getName(), cookies[i]);
			}
		}
	}
	
	// 이름으로 쿠키 객체를 반환
	public Cookie getCookie(String name) {
		return cookieMap.get(name);
	}
	
	// 이름으로 쿠ㅋ키의 저장값을 반환
	public String getValue(String name) throws IOException {
		
		Cookie cookie = cookieMap.get(name); // Map에 name키가 업으면 null 반환
		
		if(cookie==null) {
			return null;
		}
		
		return URLDecoder.decode(cookie.getValue(),"UTF-8");
	}
	
	// cookieMap에 특정 이름의 쿠키가 존재하는지 여부 확인
	public boolean exists(String name) {
		return cookieMap.get(name) != null;
	}
	
	// 쿠기 객체를 생성해주는 메소드 : 객체를 생성하지 않고도 사용할 수 있는 메소드로 정의 : static 멤버로 정의
	// 오버로딩
	
	// 이름, 값을 가지고 cookie 객체 생성
	public static Cookie createCookie(String name, String value) {
		Cookie cookie = new Cookie(name, value);
		
		return cookie;
	}
	
	// 이름, 값, 경로, 유지시간을 가지고 cookie 객체 생성
	public static Cookie createCookie(
			String name, String value, String path, int maxAge) {
		Cookie cookie = new Cookie(name, value);
		cookie.setPath(path);       // 경로 설정
		cookie.setMaxAge(maxAge);	// 쿠기 유지시간 설정		
		
		return cookie;
	}
	

	// 이름, 값, 경로, 유지시간, 도메인을 가지고 cookie 객체 생성
	public static Cookie createCookie(
			String name, String value, String path, int maxAge, String domain) {
		Cookie cookie = new Cookie(name, value);
		cookie.setPath(path);       // 경로 설정
		cookie.setMaxAge(maxAge);	// 쿠기 유지시간 설정		
		cookie.setDomain(domain);	// 쿠키 도메인 설정
		
		return cookie;
	}
}

 

loginForm.jsp

<%@page import="util.CookieBox"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	CookieBox cookieBox = new CookieBox(request);

	// 삼항연산자 [null값 출력을 막기 위해]
	String saveId =  cookieBox.exists("uid")? cookieBox.getValue("uid"):"";	
	String checked = cookieBox.exists("uid")? " checked " :  "";
	
%>
<!DOCTYPE html>
<html lang="ko">

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>로그인 폼</title>
</head>

<body>
	<h1>회원 로그인</h1>
	<hr>
	<form action="loginResult.jsp" method="get">
		<table>
			<tr>
				<th><label for="userid">아이디</label></th>
				<td><input type="text" id="userid" name="userid" value="<%= saveId%>"></td>
			</tr>
			<tr>
				<th><label for="pw">비밀번호</label></th>
				<td><input type="password" id="pw" name="pw"></td>
			</tr>
			<tr>
				<td></td>
				<td><input type="checkbox" name="chk" value="on"<%= checked %>> 아이디
					저장</td>
			</tr>
			<tr>
				<td></td>
				<td><input type="submit" value="로그인"></td>
			</tr>
		</table>
	</form>

</body>

</html>

 

 

loginResult.jsp

<%@page import="util.CookieBox"%>
<%@page import="form.LoginFormData"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%

LoginFormData lfData = new LoginFormData();

String userId = request.getParameter("userid");
String pass = request.getParameter("pw");

String chk = request.getParameter("chk");

if(chk!=null && chk.equals("on") && userId!=null && !userId.isEmpty()){
	// 쿠키 생성 저장해준다
	// uid =  userId를 저장하자
	response.addCookie(CookieBox.createCookie("uid", userId, "/", 60*60*24*365));
	
}else{
	// 저장하지 않기 & 저장이 되었다면 삭제하기
	response.addCookie(CookieBox.createCookie("uid", userId, "/", 0));
}

lfData.setUserId(userId);
lfData.setPass(pass);

request.setAttribute("loginData", lfData);
%>

<jsp:forward page="loginView.jsp"/>

 

 

체크하면 > 체크상태가 유지 되고 아이디가 기억됨

 

체크를 다시 풀면 > 쿠키에서 아이디가 사라지고 체크상태도 풀림

 

 

번외)

 

<%@page import="util.CookieBox"%>
<%@page import="java.net.URLDecoder"%>
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%

// 쿠키 객체를 생성
Cookie c1 = new Cookie("userID", "V");
// response.addCookie(쿠키객체)
response.addCookie(c1);

Cookie c2 = new Cookie("userName", URLEncoder.encode("김태형", "UTF-8"));
c2.setMaxAge(60*20); // 20분 뒤 삭제!
response.addCookie(c2);

response.addCookie(CookieBox.createCookie("nickName","MC_JADU"));
response.addCookie(CookieBox.createCookie("age", "26","/",-1));



%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>쿠키생성, 저장</h1>
	<h3> <%= c1.getName()%>=<%=c1.getValue() %></h3>
	<h3> <%= c2.getName()%>=<%= URLDecoder.decode(c2.getValue(), "utf-8")%></h3>
	
	<a href="viewCookie.jsp">쿠키 정보 보기</a>
	
</body>
</html>

viewCookie.jsp

<%@page import="util.CookieBox"%>
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%

	CookieBox cookieBox = new CookieBox(request);
	
 
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

userID = <%= cookieBox.getValue("userID") %><br>
Age = <%= cookieBox.getCookie("age").getValue() %><br>
nickName이 존재하는가? = <%= cookieBox.exists("nickName") %>

 
 <h1><a href="editCookie.jsp">쿠키 수정하기</a></h1>
 <h1><a href="deleteCookie.jsp">쿠키 삭제하기</a></h1>

</body>
</html>

 

'JAVA > Jsp&Servlet' 카테고리의 다른 글

[JSP] 표현언어 EL / Expression Language  (0) 2020.12.23
[JSP] mysql JDBC  (0) 2020.12.18
[JSP] session 기본 객체  (0) 2020.12.18
[JSP] 쿠키  (0) 2020.12.17
[JSP] 에러  (0) 2020.12.17
[JSP] beans 빈즈  (0) 2020.12.17
[JSP] 내장객체와 속성관리 / 생명주기  (0) 2020.12.16

+ Recent posts