# 쿠키 만들기
<%
String key = URLEncoder.encode("이름","utf-8");
String val = URLEncoder.encode("홍길동","utf-8");
Cookie c1 = new Cookie(key,val);
response.addCookie(c1);
%>
# 쿠키 가져오기
<%
Cookie[] cookies = request.getCookies();
for(Cookie ck:cookies){
%>
<%=URLDecoder.decode(ck.getName(),"utf-8")%>
<%=URLDecoder.decode(ck.getValue(),"utf-8")%>
<%}%>
## a10_CookieList.jsp
<%@ import="java.net.URLDecoder" %>
<h2>현재 쿠키 리스트</h2>
<form method="post" action="a11_proc.jsp">
<table id="tb">
<tr><th>선택</th><th>쿠키의 키</th><th>쿠키의 값</th></tr>
<%
Cookie cks[] = request.getCookies();
for(int idx=0;idx<cks.length;idx++){
Cookie c = cks[idx];
// 한글로 decoding
String key = URLDecoder.decode(c.getName(),"UTF-8");
String val = URLDecoder.decode(c.getValue(),"UTF-8");
%>
<tr><td><input type="checkbox" name="cidx"
value="<%=idx%>"/></td>
<td><input type="text" name="ckey"
value="<%=key.equals("JSESSIONID")?"":key%>"/></td>
<td><input type="text" name="cval"
value="<%=key.equals("JSESSIONID")?"":val%>"/></td></tr>
<%
}
%>
</table>
<input type="hidden" name="proc"/>
</form>
<input type="button" value="쿠키추가/변경" onclick="go('add')"/>
<%--쿠키값의 key가 같으면 변경이 되고, 다르면 추가 --%>
<input type="button" value="쿠키삭제" onclick="go('del')"/>
</body>
<script>
function go(proc){
// check를 해야 다음 페이지에 전송되게 처리
var ckDoms = document.querySelectorAll("[name=cidx]");
var isCheck = false
for(var idx=0;idx<ckDoms.length;idx++){
if(ckDoms[idx].checked)
isCheck = true;
}
if(!isCheck){
alert("선택된 쿠키값이 없네요\n체크박스를 선택해주세요")
return;
}
document.querySelector("[name=proc]").value=proc;
// DOM 객체의 아래와 같이 요소객체로 배열을 설정하는 경우도 있다.
document.forms[0].submit();
}
## a11_proc.jsp
<%@ import="java.net.URLEncoder" %>
<%
String proc = request.getParameter("proc");
String[] cidx = request.getParameterValues("cidx");
String[] ckey = request.getParameterValues("ckey");
String[] cval = request.getParameterValues("cval");
if(proc!=null){ //쿠키값 화면에서 넘어올때만 처리
for(String cidxS:cidx){
int idx = Integer.parseInt(cidxS);
// 쿠키값 encoding
String key = URLEncoder.encode(ckey[idx],"UTF-8");
String val = URLEncoder.encode(cval[idx],"UTF-8");
// 입력값이 없을 때 check한 것에 대한 에러 방지
if(!key.equals("")&&!val.equals("")){
// 쿠키를 만들어서 수정과 등록은 같은 프로세스로 처리되고
// 삭제만 setMaxAge를 0으로 추가처리한다.
Cookie c = new Cookie(key,val);
if(proc.equals("del")){
c.setMaxAge(0);
}
response.addCookie(c);
}
}
}
// 서버단에서 페이지 이동 코드로 서버로 이동처리..
response.sendRedirect("a10_CookieList.jsp");
%>