해당 게시물은 Udemy의 "JSP, Servlets and JDBC for Beginners" 강의를 정리한 내용입니다. 영어를 한국어로 번역하는 과정에서 잘못된 부분이 있을 수 있습니다. 또한 기타 게시물들의 내용을 참조한 부분이 있습니다.
This post summarizes Udemy's "JSP, Servlets and JDBC for Beginners" lecture.

Cookie(String name, String value)
<meta charset="euc-kr">
<html>
<head>
<title> Personalize Site</title>
</head>
<body>
<form action ="cookies-personalize-response.jsp">
너가 제일 좋아하는 프로그래밍 언어 골라봐!
<select name = "favoriteLanguage">
<option> Java </option>
<option> Python </option>
<option> C </option>
<option> Ruby</option>
</select>
<br/><br/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=euc-kr" pageEncoding="EUC-KR"%>
<%@ page import="java.util.*" %>
<html>
<head><title> 확인 </title></head>
<%
// form data 읽어오기
String favLang = request.getParameter("favoriteLanguage");
// 쿠키 생성하기
Cookie theCookie = new Cookie("myApp.favoriteLanguage", favLang);
//cookie 지속하는 시간 설정
theCookie.setMaxAge(60*60*24*365); // 1년 (초 단위로 설정 )
// 쿠키를 브라우저에 전송하기
response.addCookie(theCookie);
%>
<body>
고마워! 너가 제일 좋아하는 언어 ${param.favoriteLanguage} 로 설정할게!
<br/><br/>
<a href = "cookies-homepage.jsp">홈 페이지로 이동하기</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=euc-kr" pageEncoding="EUC-KR"%>
<%@ page import="java.util.*" %>
<html>
<body>
<h3> 메인 페이지 </h3>
<!-- 쿠키로부터 제일 좋아하는 프로그래밍 언어 읽어오기 -->
<%
// 쿠키가 없을 경우 (기본)
String favLang = "Java";
// 브라우저 요청으로 쿠키 받아오기
Cookie[] theCookies = request.getCookies();
// 제일 좋아하는 언어 쿠키 찾
if (theCookies != null){
for (Cookie tempCookie: theCookies){
if("myApp.favoriteLanguage".equals(tempCookie.getName())){
favLang = tempCookie.getValue();
break;
}
}
}
%>
<!-- 개인 맞춤화된 페이지 -->
<h4> <%=favLang%> 관련 새로운 책</h4>
<ul>
<li> 어쩌구 저쩌구 </li>
<li> 어쩌구 저쩌구 </li>
</ul>
<h4> <%=favLang%> 관련 새로운 소식 </h4>
<ul>
<li> 어쩌구 저쩌구 </li>
<li> 어쩌구 저쩌구 </li>
</ul>
<h4> <%=favLang%> 관련 새로운 일자리 </h4>
<ul>
<li> 어쩌구 저쩌구 </li>
<li> 어쩌구 저쩌구 </li>
</ul>
<hr>
<a href="cookies-personalize-form.html">개인 맞춤 페이지로 가기 </a>
</body>
</html>





크롬 브라우저에서 쿠키 삭제 후

쿠키값들을 encode, decode 하기 위해 URL이 필요하다.
처음에 왜 굳이 이렇게 해줘야 하는 지, 아무런 오류가 기존에 나지도 않고, 출력값도 똑같은데 무엇을 위해 하는 건지 몰랐다. 검색해보니, 인프런 Q&A 부분에 누군가가 답을 해주었다. 그 이유는 아래와 같다.
웹 프로토콜에 보면 서버와 클라이언트간의 데이터는 영문, 숫자, 일부 특수문자만 가능하다. 한글과 같은 유니코드 문자와 공백은 허용하지 않는다.
그래서 지원하지 않는 문자들을 코드화 시켜 유니코드글자와 공백 등을 다른 문자로 대체한 문자열을 만들어 사용하게 된다. 유니코드 문자열을 코드화 시키는 것을 인코딩, 이걸 다시 복원하는 것이 디코딩이다.
클라이언트에게 보낼 때 서버에서 인코딩 해서 보내고 클라이언트가 보낼때는 인코딩되어 있는 문자열을 디코딩해서 사용해야 한다. 파라미터나 응답결과에 있는 문자열들은 자동으로 인코딩 디코딩을 하기 때문에 문제가 되지 않는다. 허나 쿠키의 경우는 자동으로 처리가 되지 않아 직접 작업을 해줘야 한다. 이건 웹 표준에 정해져 있는 프로토콜이므로 왜 이렇게 해야하나~ 보단 이렇게 해야 한다고 생각해야 한다.
<%@ page import="java.net.URLDecoder" %>
//쿠키 데이터 해독 ... handle case of languages with spaces in them
favLang = URLDecoder.decode(tempCookie.getValue(), "UTF-8");
<%@ page import="java.net.URLEncoder" %>
// 쿠키 데이터 부호화 ... handle case of languages with spaces in them
favLang = URLEncoder.encode(favLang, "UTF-8");
참조