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 |