● 쿠키(Cookie)
- 웹 브라우저가 보관하고 있는 데이터로, 웹 서버에 요청을 보낼 때 헤더에 담아서 전송한다.
- 웹 브라우저는 쿠기가 삭제되기 전까지 웹 서버에 쿠키를 전송한다.
● 장단점
- 클라이언트의 특정 폴더에 정보를 저장하기 때문에 서버의 부하를 줄일 수 있다.
- 정보가 사용자 컴퓨터(로컬)에 저장되기 때문에 보안에 위협받을 수 있다.
- 데이터 저장 용량에 한계가 있다.
- 일반 사용자가 브라우저 내의 기능인 "쿠키 차단"을 사용했을 경우 쿠키는 무용지물이 된다.
● 쿠키 동작 방식
1. 쿠키 생성
- 웹 서버에서 쿠키를 생성하고 쿠키에 응답 데이터를 담아서 웹 브라우저에 전송한다.
2. 쿠키 저장
- 웹 브라우저는 응답 데이터를 담고 있는 쿠키를 메모리나 파일로 저장한다.
3. 쿠키 전송
- 웹 브라우저는 쿠키 요청이 있을 때마다 웹 서버에 전송한다.
- 웹 서버는 쿠키를 사용해서 필요한 작업을 수행할 수 있다.
● 쿠키 생성 및 사용 방식
1) 쿠키 생성 후 response 객체에 담아준다.
Cookie cookie = new Cookie("쿠키 이름", "쿠키 값");
response.addCookie(cookie);
2) 쿠키 유무를 확인하고 쿠키의 값을 얻어온다.
String cookieCheck = request.getHeader("Cookie");
if(cookieCheck != null){
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
cookie.getName();
cookie.getValue();
}
}
3) 쿠키를 삭제한다.
String cookieCheck = request.getHeader("Cookie");
if(cookieCheck != null){
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
cookie.setMaxAge(0); //초단위
response.addCookie(cookie);
}
}
실습(MVC)
- [Web_JSP] 14 이어서
1. MemberJoinOk.java
package com.board.app.member;
import java.io.IOException;
import java.util.Base64;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.board.app.action.Action;
import com.board.app.action.ActionInfo;
import com.board.app.domain.dao.MemberDAO;
import com.board.app.domain.vo.MemberVO;
public class MemberJoinOk implements Action {
@Override
public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8");
ActionInfo actionInfo = new ActionInfo();
MemberDAO memberDAO = new MemberDAO();
MemberVO memberVO = new MemberVO();
memberVO.setMemberId(req.getParameter("memberId"));
memberVO.setMemberPw(new String(Base64.getEncoder().encode(req.getParameter("memberPw").getBytes())));
memberVO.setMemberName(req.getParameter("memberName"));
memberVO.setMemberAge(Integer.parseInt(req.getParameter("memberAge")));
memberVO.setMemberGender(req.getParameter("memberGender"));
memberVO.setMemberEmail(req.getParameter("memberEmail"));
memberVO.setMemberZipcode(req.getParameter("memberZipcode"));
memberVO.setMemberAddress(req.getParameter("memberAddress"));
memberVO.setMemberAddressDetail(req.getParameter("memberAddressDetail"));
memberDAO.insert(memberVO);
actionInfo.setPath("/member/MemberLogin.me");
actionInfo.setRedirect(false);
return actionInfo;
}
}
2. MemberLogin.java
package com.board.app.member;
import java.io.IOException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.board.app.action.Action;
import com.board.app.action.ActionInfo;
public class MemberLogin implements Action {
@Override
public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
ActionInfo actionInfo = new ActionInfo();
//쿠키 검사
String memberId = null;
String memberPw = null;
String saveId = null;
String autoLogin = null;
String cookieCheck = req.getHeader("Cookie");
if(cookieCheck != null) {
Cookie[] cookies = req.getCookies();
for(Cookie cookie : cookies) {
if(cookie.getName().equals("memberId")) {
memberId = cookie.getValue();
} else if(cookie.getName().equals("memberPw")) {
memberPw = cookie.getValue();
} else if(cookie.getName().equals("saveId")) {
saveId = cookie.getValue();
}else if(cookie.getName().equals("autoLogin")) {
autoLogin = cookie.getValue();
}
}
}
req.setAttribute("memberId", memberId);
req.setAttribute("memberPw", memberPw);
req.setAttribute("saveId", saveId);
req.setAttribute("autoLogin", autoLogin);
actionInfo.setPath("/app/member/login.jsp");
actionInfo.setRedirect(false);
return actionInfo;
}
}
3. MemberLoginOk.java
package com.board.app.member;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.board.app.action.Action;
import com.board.app.action.ActionInfo;
public class MemberLoginOk implements Action{
@Override
public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8");
String memberId = req.getParameter("memberId");
String memberPw = req.getParameter("memberPw");
String saveId = req.getParameter("saveId");
String autoLogin = req.getParameter("autoLogin");
//쿠키 생성
System.out.println(memberId);
System.out.println(memberPw);
System.out.println(saveId);
System.out.println(autoLogin);
return null;
}
}
4. MemberFrontController.java
package com.board.app.member;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.board.app.action.ActionInfo;
public class MemberFrontController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doProcess(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doProcess(req, resp);
}
protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String requestURL = req.getRequestURI();
// String command = requestURL.substring(requestURL.lastIndexOf("/") + 1);
String command = requestURL.substring(req.getContextPath().length());
ActionInfo actionInfo = null;
System.out.println(command);
if(command.equals("/member/MemberCheckIdOk.me")) {
new MemberCheckIdOk().execute(req, resp);
}else if(command.equals("/member/MemberJoinOk.me")) {
actionInfo = new MemberJoinOk().execute(req, resp);
}else if(command.equals("/member/MemberLogin.me")) {
actionInfo = new MemberLogin().execute(req, resp);
}else if(command.equals("/member/MemberLoginOk.me")) {
actionInfo = new MemberLoginOk().execute(req, resp);
}
if(actionInfo != null) {
if(actionInfo.isRedirect()) {
resp.sendRedirect(actionInfo.getPath());
}else {
RequestDispatcher dispatcher = req.getRequestDispatcher(actionInfo.getPath());
dispatcher.forward(req, resp);
}
}
}
}
'웹 개발 > JSP' 카테고리의 다른 글
[Web_JSP] 17 (0) | 2022.06.05 |
---|---|
[Web_JSP] 16 (0) | 2022.06.04 |
[Web_JSP] 14 (0) | 2022.06.02 |
[Web_JSP] 13 (0) | 2022.06.01 |
[Web_JSP] 12 (0) | 2022.05.31 |