๋ฐ์ํ
1. ๐ช์ฟ ํค(Cookie)
- ์๋ฒ(์นํ๋ก๊ทธ๋จ)์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ ๊ฐ(๋ฌธ์์ด)
- ์ฟ ํค๋ ์ ์ ์๋ฒ ์ ๋ณด๋ฅผ ์๋ณ์๋ก ๊ตฌ๋ถํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์ฅ
2. ๐ช์ฟ ํค๋ ์ธ์ ์ฌ์ฉ?
- ์๋ฐ์คํฌ๋ฆฝํธ : ๋์์ธ์ ๋ํ ๋ ์ด์์์ ๊ตฌ์ฑํ๊ธฐ ์ํด
- ex) ๋ฐ์ค๋ชจ๋ธ์ ์ค๋ ํ๋ฃจ ๋์ ๋ณด์ง ์๊ธฐ, ์ผ์ฃผ์ผ๋์ ๋ณด์ง ์๊ธฐ ์ฒดํฌ
- ์๋ฐ(์๋ธ๋ฆฟ) : ์ฌ์ดํธ์ ์ ์ํ๋ ์ฌ์ฉ์์ธ์ง ์๋์ง ํ์ธํ๊ธฐ ์ํด
- ex) ๋ก๊ทธ์ธ ์ํ ์ ์งํ๊ธฐ, ๊ฒ์๋ฌผ์ ์กฐํ์ ์ ์งํ๊ธฐ ์ฒดํฌ
- ์ฆ, ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ฐ์ดํ๋ฒ ์ด์ค์๋ง ์ ์ฅํ๋ ๊ฒ์ด ์๋ ํด๋ผ์ด์ธํธ์ ์ ์ฅํด ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์
- ์ด๋ค ์ฌ์ดํธ์ ๋ค์ด๊ฐ์ ๊ทธ ์ฌ์ดํธ์ ์๋ ์นํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ๊ทธ ํ๋ก๊ทธ๋จ์ ์ฟ ํค๊ฐ ๋ชจ๋ ๋ค ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋จ
- ํด๋ผ์ด์ธํธ๋ ๋งค์ฐ ๋ง์ ์ฟ ํค๊ฐ ์กด์ฌํจ
- ํด๋ผ์ด์ธํธ๋ ์ ์์๋ฒ์ ์ ๋ณด๋ฅผ ์ด์ฉํด์ ์ฟ ํค๋ฅผ ๊ตฌ๋ถํด์ ์ ์ฅํจ (ex. ํ๋กํ ์ฝ)
- ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์๋ฒ์ ์๋ ์น ํ๋ก๊ทธ๋จ์ ์์ฒญํ๋ฉด ์๋ฒ ์์์ ๋ฑ๋ก๋ ์ฟ ํค๊ฐ ๋ฌด์กฐ๊ฑด ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋จ
3. ์ฟ ํค๋ฅผ ์ฌ์ฉํ ์์
1) ์ฟ ํค๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ ์๋ธ๋ฆฟ
๐ช CookieCreateServlet.java - ์ฟ ํค ์ ๋ฌ
package xyz.itwill.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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("/create.itwill")
public class CookieCreateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.
//ํด๋ผ์ผ, response์ [Body]์ html ๋ฌธ์ ์ค๊ฒ (์ฝ์)
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//2.
//Cookie ํด๋์ค๋ก ๊ฐ์ฒด ์์ฑ
//Cookie ๊ฐ์ฒด : ์ฟ ํค ๊ด๋ จ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
//๐ชCookie(String name, String value) :์ฟ ํค๋ช
๊ณผ ์ฟ ํค๊ฐ์ ๋งค๊ฐ๋ณ์์ ์ ๋ฌํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์์ฑ์
//=> "์ฟ ํค๋ช
" : ์ฟ ํค๊ฐ์ ๊ตฌ๋ถํ๊ธฐ ์ํ "์๋ณ์"
//=> "์ฟ ํค๊ฐ" : ์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํ "๋ฌธ์๊ฐ"
//=> ์ฟ ํค๋ช
๊ณผ ์ฟ ํค๊ฐ์ ์๋ฌธ์, ์ซ์, ์ผ๋ถ ํน์๋ฌธ์๋ง ์ฌ์ฉํ์ฌ ์์ฑ ๊ฐ๋ฅ, ๊ทธ ์ธ ๋ฌธ์ ์ฌ์ฉํ๋ฉด error์ด๋ฏ๋ก ์ ์ฅ ์๋จ
Cookie idCookie = new Cookie("id", "abc123"); //์ฟ ํค์ ์ง์๊ฐ: ๋ธ๋ผ์ฐ์ ์ ์๋ฉธ
//Cookie idCookie = new Cookie("id", URLEncoder.encode("ํ๊ธธ๋","utf-8"));
//=>๋ถํธํ์ฒ๋ฆฌํด์ ์ ์ฅ์ ๊ฐ๋ฅํ๋ ๋น๊ถ์ฅ
Cookie countCookie = new Cookie("count", "0");
//3.
//ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋์ด ์ ์ฅ๋ ์ฟ ํค์ ์ ์ง์๊ฐ ๋ณ๊ฒฝ
//๐ชCookie.setMaxAge(int expiry) : ์ฟ ํค์ ์ ์ง์๊ฐ(์ด/s)์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋
//์ฟ ํค์ ์ ์ง์๊ฐ์ ๋ณ๊ฒฝํ์ง ์์ ๊ฒฝ์ฐ ๊ฐ๋ณธ๊ฐ์ [-1]๋ก ์๋ ์ค์
// => ์ฟ ํค์ ์ ์ง์๊ฐ์ด [-1]๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์ฟ ํค๋ "๋ธ๋ผ์ฐ์ ์ข
๋ฃ ์ ์๋ ์๋ฉธ"
countCookie.setMaxAge(20*60*60); //์ฟ ํค์ ์ง์๊ฐ: 1์ผ
//ํด๋ผ์ผ, ๋ ์ด ์ฟ ํค ๋ฐ์๋ง์ ํ๋ฃจ ๋์ ์ ์งํด~
//4.
//ํด๋ผ์ผ, response์ [header]์ ์ฟ ํค์ค๊ฒ (์ ์ก)
//ํด๋ผ์ด์ธํธ์๊ฒ ์ฟ ํค ์ ๋ฌ - ์ฟ ํค๋ฅผ ์ ๋ฌ๋ฐ์ ํด๋ผ์ด์ธํธ๋ ์ฟ ํค๋ฅผ ์ ์ฅ
//์ฟ ํค์ ์ ์ง์๊ฐ[-1]์ ๋ณ๊ฒฝํ์ง ์์ ์ฟ ํค๋ "๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ"์ ์ ์ฅ
//=> "๋ธ๋ผ์ฐ์ ์ข
๋ฃ ์" ์๋์๋ฉธ
//์ฟ ํค์ ์ ์ง์๊ฐ์ ๋ณ๊ฒฝํ ์ฟ ํค๋ "์ฟ ํคํ์ผ"์ ์ ์ฅ
//=> "์ ์ง์๊ฐ์ด ์ง๋๋ฉด" ์๋์๋ฉธ (์ฆ, ๋ธ๋ผ์ฐ์ ์ข
๋ฃํด๋ ๊ณ์ ์ ์งํ๊ฒ ๋ค)
//๐ชHttpServletResponse.addCookie(Cookie cookie) :
//=> ํด๋ผ์ด์ธํธ์๊ฒ ์ฟ ํค(Cookie ๊ฐ์ฒด)๋ฅผ ์ ๋ฌํ๋ ๋ฉ์๋
response.addCookie(idCookie);
response.addCookie(countCookie);
//5.
//ํด๋ผ์ผ, response์ [Body]์ html ๋ฌธ์ ์ค๊ฒ (์ ์ก)
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>์ฟ ํค์ ๋ฌ</h1>");
out.println("<hr>");
out.println("<p>๋ค ์์ ์ฟ ํค ์๋ค./p>");
out.println("<hr>");
out.println("<a href='read.itwill'>์ฟ ํค ์ฝ๊ธฐ</a>");
out.println("</body>");
out.println("</html>");
}
}
2) ํด๋ผ์ด์ธํธ์ ์ํด ์ ๋ฌ๋ ์ฟ ํค๋ฅผ ์ฝ์ด ์ฟ ํค๊ฐ์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ ์๋ธ๋ฆฟ
๐ช CookieReadServlet.java - ์ฟ ํค๊ฐ ์ฝ๊ธฐ ๋ฐ ์ ๋ฌ
- ํด๋ผ์ด์ธํธ๋ ์์ฒญ URL ์ฃผ์์ ์ ์ ์๋ฒ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ํด๋น ์๋ฒ ์ ๋ณด๊ฐ ์ ์ฅ๋ ๋ชจ๋ ์ฟ ํค๋ฅผ ์นํ๋ก๊ทธ๋จ ์์ฒญ ์ ๋ฌด์กฐ๊ฑด ์ ๋ฌ
package xyz.itwill.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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("/read.itwill")
public class CookieReadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.
//ํด๋ผ์ผ, response์ [Body]์ html ๋ฌธ์ ์ค๊ฒ (์ฝ์)
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//2.
//ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์จ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ฐํ๋ฐ์ ์ ์ฅ
//๐ชHttpServletRequest.getCookies() :
//ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์จ ๋ชจ๋ ์ฟ ํค๋ฅผ "Cookie๊ฐ์ฒด๋ฐฐ์ด"๋ก ๋ฐํํ๋ ๋ฉ์๋
Cookie[] cookies = request.getCookies();
//3.
//ํด๋ผ์ผ, response์ [Body]์ html ๋ฌธ์ ์ค๊ฒ (์ ์ก)
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>์ฟ ํค ์ฝ๊ธฐ</h1>");
out.println("<hr>");
if(cookies==null) {//ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์จ ์ฟ ํค๊ฐ ์๋ ๊ฒฝ์ฐ
out.println("<p>๋ค ์์ ์ฟ ํค ์๋ค./p>");
} else {
//3-1.
//์ฟ ํค๊ฐ์ ๊ฐ์ง๊ณ ์ฌ ๋ณ์ ์ค์
String id = "";
String count = "";
//3-2.
//Cookie ๊ฐ์ฒด ๋ฐฐ์ด์ ์ ์ฅ๋ ์์๊ฐ(Cookie ๊ฐ์ฒด)์ ๋ฐ๋ณต์ ์ผ๋ก ์ ๊ณต๋ฐ์ ์ฒ๋ฆฌ
for(Cookie cookie:cookies) {
//ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์จ ์ฟ ํค ์ค ์ฟ ํค๋ช
์ ๋น๊ตํ์ฌ ์ํ๋ ์ฟ ํค๊ฐ์ ๋ฐํ๋ฐ์ ์ ์ฅ
//๐ชCookie.getName() :
//=>Cookie ๊ฐ์ฒด์ ์ ์ฅ๋ ์ฟ ํค๋ช
์ ๋ฐํํ๋ ๋ฉ์๋
if(cookie.getName().equals("id")) {
//๐ชCookie.getValue() :
//=>Cookie ๊ฐ์ฒด์ ์ ์ฅ๋ ์ฟ ํค๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋
id = cookie.getValue();
} else if(cookie.getName().equals("count")) {
count = cookie.getValue();
}
}
//3-3.
//ํด๋ผ์ด์ธํธ์๊ฒ id ์ฟ ํค๊ฐ์ ์ ๋ฌํ์ฌ ์ถ๋ ฅ
if(!id.equals("")) { //์ฟ ํค๊ฐ์ด ์๋ ๊ฒฝ์ฐ
out.println("<p>์์ด๋ = " +id+"</p>");
}
//3-4.
//ํด๋ผ์ด์ธํธ์๊ฒ count ์ฟ ํค๊ฐ์ ์ ๋ฌํ์ฌ ์ถ๋ ฅ
if(!count.equals("")) { //์ฟ ํค๊ฐ์ด ์๋ ๊ฒฝ์ฐ
int cnt = Integer.parseInt(count)+1;
out.println("<p>์๋ธ๋ฆฟ ์์ฒญ ํ์ = " +cnt+"</p>");
//ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ ๊ธฐ์กด ์ฟ ํค ์ด๋ฆ๊ณผ ๊ฐ์ ์ด๋ฆ์ ์ฟ ํค๋ฅผ ์ ๋ฌํ๋ฉด ์ฟ ํค๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ
Cookie cookie = new Cookie("count", cnt+"");
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
//addCookie์ 2๊ฐ์ง ์ญํ : ์์ผ๋ฉด ์ ์ฅ, ์์ผ๋ฉด ๊ธฐ์กด๊ฐ ๋ฎ์ด์์ฐ๊ธฐ
}
}
out.println("<hr>");
out.println("<a href='create.itwill'>์ฟ ํค ์ ๋ฌ</a>");
out.println("<a href='remove.itwill'>์ฟ ํค ์ญ์ </a>");
out.println("</body>");
out.println("</html>");
}
}
3) ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ ์ฟ ํค๋ฅผ ์ ๊ฑฐํ๋ ์๋ธ๋ฆฟ
๐ชCookieRemoveServlet.java - ์ฟ ํค ์ ๊ฑฐ
- ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ ์ฟ ํค์ ์ ์ง์๊ฐ์ [0]์ผ๋ก ๋ณ๊ฒฝํ๋ฉฐ ์ฟ ํค ์ ๊ฑฐ
package xyz.itwill.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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;
//ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ ๋ชจ๋ ์ฟ ํค๋ฅผ ์ ๊ฑฐํ๋ ์๋ธ๋ฆฟ
// => ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ ์ฟ ํค์ ์ ์ง์๊ฐ์ [0]์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ์ฟ ํค ์ ๊ฑฐ
@WebServlet("/remove.itwill")
public class CookieRemoveServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.
//ํด๋ผ์ผ, response์ [Body]์ html ๋ฌธ์ ์ค๊ฒ (์ฝ์)
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//2.
//ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์จ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ฐํ๋ฐ์ ์ ์ฅ
Cookie[] cookies=request.getCookies();
//3.
if(cookies!=null) {//ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์จ ์ฟ ํค๊ฐ ์๋ ๊ฒฝ์ฐ
//Cookie ๊ฐ์ฒด ๋ฐฐ์ด์ ์ ์ฅ๋ ์์๊ฐ(Cookie ๊ฐ์ฒด)๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ ๊ณต๋ฐ์ ์ฒ๋ฆฌ
for(Cookie cookie:cookies) {
//ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์จ ์ฟ ํค์ ์ ์ง์๊ฐ์ [0]์ผ๋ก ๋ณ๊ฒฝํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ
// => ์ ์ง์๊ฐ์ด ์ง๋ ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์์ ์๋ ์๋ฉธ - ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ ์ฟ ํค ์ ๊ฑฐ
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
//4.
//ํด๋ผ์ผ, response์ [Body]์ html ๋ฌธ์ ์ค๊ฒ (์ ์ก)
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>์ฟ ํค ์ ๊ฑฐ</h1>");
out.println("<hr>");
out.println("<p>๋ค ์์ ์ฟ ํค ์๋ค.</p>");
out.println("<hr>");
out.println("<p><a href='read.itwill'>์ฟ ํค ์ฝ๊ธฐ</a></p>");
out.println("</body>");
out.println("</html>");
}
}
๋ฐ์ํ
'servlet' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[servlet] 8. JDBC ํ๋ก๊ทธ๋จ (0) | 2024.05.26 |
---|---|
[servlet] 7. ๋ฐ์ธ๋ฉ๋ ์ธ์ ์ ๋ฌ ํ๋ก๊ทธ๋จ (session) (0) | 2024.05.25 |
[servlet] 5. ํ์ผ์ ๋ก๋ ํ๋ก๊ทธ๋จ (multipart/form-data) (0) | 2024.05.24 |
[servlet] 4. ํ์๊ฐ์ ํ๋ก๊ทธ๋จ (form) (0) | 2024.05.24 |
[servlet] 3. ๊ณต์ง์ฌํญ ํ๋ก๊ทธ๋จ(์ด๋ฏธ์ง, html) (0) | 2024.05.23 |