JSP Servlet 쿠키 : 주문 처리 페이지 만들기 2
04 쿠키 삭제
Cookie 클래스는 쿠키를 삭제하는 기능을 별도로 제공하지 않으며, 쿠키를 더 유지할 필요가 없으면 쿠키의 유효기간을 만료하면 된다. 즉 쿠키의 유효기간을 결정하는 setMaxAge() 메소드에 유효기간을 0 으로 설정하여 쿠키를 삭제 할 수 있다. setMaxAge() 메소드의 형식은 다음과 같다.
void setMaxAge(int age)
여기서 매개변수 age는 쿠키가 지속되는 유효 기간을 나타낸다.
다음은 쿠키 이름이 memberId 이고 쿠키값을 admin 으로 쿠키를 생성한 후 유효 기간을 0으로 설정하여 쿠키를 삭제하는 예이다.
[setMaxAge() 메소드 사용 예]
Cookie cookie = new Cookie("memberId" , "admin");
cookie.setMaxAge(0);
response.addCookie(cookie);
예제 - 쿠키 객체에 저장된 모든 쿠키 삭제하기
cookie03.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Cookie</title>
</head>
<body>
<%
//쿠키 정보를 얻어오도록 request 내장 객체의 getCookies() 메소드를 작성한다.
Cookie[] cookies = request.getCookies();
//얻어온 모든 쿠키를 삭제하도록 Cookie 객체의 setMaxAge() 메소드에 유효기간을 0으로 설정한다.
for (int i= 0; i< cookies.length; i++){
cookies[i].setMaxAge(0);
response.addCookie(cookies[i]);
}
//웹 페이지 cookie02.jsp 로 이동하도록 response 내장 객체의 sendRedirect() 메소드를 작성한다.
response.sendRedirect("cookie02.jsp");
%>
</body>
</html>
05 웹 쇼핑몰 : 주문 처리 페이지 만들기
예제- 쿠키를 이용하여 주문 처리 페이지 만들기
1. 장바구니 페이지 수정하기 :
cart.jsp 파일에 다음과 같이 추가작성한다.
<td align="right"><a href="./shippingInfo.jsp?cartId=<%=cartId %>" class="btn btn-success">주문하기</a></td>
2. 배송 정보 페이지 작성하기 :
shippingInfo.jsp 파일을 생성하고 다음과 같이 작성한다.
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="dto.Product" %>
<%@ page import="dao.ProductRepository" %>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>배송 정보</title>
</head>
<body>
<jsp:include page = "menu.jsp" />
<div class="jumbotron">
<div class="container">
<h1 class="display-3">배송 정보</h1>
</div>
</div>
<div class="container">
<!-- 입력 양식에 입력된 데이터를 서버로 전송하여 폼 데이터를 처리하도록 form 태그의 action 속성 값, method 방식을 작성한다. -->
<form action="./processShippingInfo.jsp" class="form-horizontal" method="post">
<!-- 장바구니 아이디 값을 숨겨서 전달하도록 input 태그의 type 속성 값을 hidden으로 작성하고, name 속성 값을 cartId 로 작성한다.
value 속성 값은 request 내장 객체의 getParameter() 메소드를 이용하여 장바구니 아이디 cartId를 전송받도록 작성한다. -->
<input type="hidden" name="cartId" value="<%=request.getParameter("cartId")%>" />
<div class="form-group row">
<label class="col-sm-2">성명</label>
<div class="col-sm-3">
<input name="name" type="text" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">배송일</label>
<div class="col-sm-3">
<input name="shippingDate" type="text" class="form-control" /> (yyyy/mm/dd)
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">국가명</label>
<div class="col-sm-3">
<input name="country" type="text" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">우편번호</label>
<div class="col-sm-3">
<input name="zipCode" type="text" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">주소</label>
<div class="col-sm-3">
<input name="addressName" type="text" class="form-control" />
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10">
<!-- <이전> , <등록>, <취소> 버튼을 작성한다. -->
<a href="./cart.jsp?cartId=<%=request.getParameter("cartId")%>" class="btn btn-secondary" role="button"> 이전 </a>
<input type="submit" class="btn btn-primary" value="등록"/>
<a href="./checkOutCancelled.jsp" class="btn btn-secondary" role="button"> 취소 </a>
</div>
</div>
</form>
</div>
<jsp:include page="footer.jsp"/>
</body>
</html>
3. 배송 정보 처리 페이지 작성하기 :
processShippingInfo.jsp
<%@page import="java.util.Locale.IsoCountryCode"%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.net.URLEncoder" %>
<%
request.setCharacterEncoding("utf-8");
//폼 페이지에서 전송된 장바구니 아이디, 성명, 배송일, 국가, 우편번호, 주소 등을 전달받도록 request 내장 객체의 getParameter() 메소드를 작성한다.
//이를 쿠키로 생성하도록 Cookie 클래스를 이용하여 작성한다.
Cookie cartId = new Cookie("Shipping_cartId" , URLEncoder.encode(request.getParameter("cartId"),"utf-8"));
Cookie name = new Cookie("Shipping_name" , URLEncoder.encode(request.getParameter("name"),"utf-8"));
Cookie shippingDate = new Cookie ("Shipping_shippingDate", URLEncoder.encode(request.getParameter("shippingDate"),"utf-8"));
Cookie country = new Cookie("shipping_country", URLEncoder.encode(request.getParameter("country"),"utf-8"));
Cookie zipCode = new Cookie("shipping_zipCode", URLEncoder.encode(request.getParameter("zipCode"),"utf-8"));
Cookie addressName = new Cookie("shipping_addressName", URLEncoder.encode(request.getParameter("addressName"),"utf-8"));
//생성한 쿠키의 유효기간을 24시간(24 * 60 * 60 초)으로 설정하도록 작성한다.
cartId.setMaxAge(24 * 60 * 60);
name.setMaxAge(24 * 60 * 60);
zipCode.setMaxAge(24 * 60 * 60);
country.setMaxAge(24 * 60 * 60);
addressName.setMaxAge(24 * 60 * 60);
//쿠키를 등록하도록 response 내장 객체의 addCookie()메소드를 작성한다.
response.addCookie(cartId);
response.addCookie(name);
response.addCookie(shippingDate);
response.addCookie(country);
response.addCookie(zipCode);
response.addCookie(addressName);
//주문 정보 페이지 orderConfirmation.jsp 로 이동하도록 response 내장 객체의 sendRedirect() 메소드를 작성한다.
response.sendRedirect("orderConfirmation.jsp");
%>
4. 주문 정보 페이지 작성하기
orderConfirmation.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page import="dto.Product" %>
<%@ page import="dao.ProductRepository" %>
<%
request.setCharacterEncoding("utf-8");
//고유한 세션 내장 객체의 아이디를 가져오도록 session 내장 객체의 getId() 메소드를 작성한다.
String cartId = session.getId();
String shipping_cartId = "";
String shipping_name = "";
String shipping_shippingDate = "";
String shipping_country = "";
String shipping_zipCode = "";
String shipping_addressName = "";
//쿠카 객체를 얻어와 장바구니 아이디, 성명, 배송일, 국가, 우편번호, 주소 등의 쿠키 정보를 얻어오도록 Cookie 객체의 getValue()메소드를 작성한다.
Cookie[] cookies = request.getCookies();
if ( cookies != null){
for ( int i= 0; i < cookies.length; i++) {
Cookie thisCookie = cookies[i];
String n = thisCookie.getName();
if ( n.equals("Shipping_cartId"))
shipping_cartId = URLDecoder.decode((thisCookie.getValue()),"utf-8");
if ( n.equals("Shipping_name"))
shipping_name = URLDecoder.decode((thisCookie.getValue()),"utf-8");
if ( n.equals("Shipping_shippingDate"))
shipping_shippingDate = URLDecoder.decode((thisCookie.getValue()),"utf-8");
if ( n.equals("Shipping_country"))
shipping_country = URLDecoder.decode((thisCookie.getValue()),"utf-8");
if ( n.equals("Shipping_zipCode"))
shipping_zipCode = URLDecoder.decode((thisCookie.getValue()),"utf-8");
if ( n.equals("Shipping_addressName"))
shipping_addressName = URLDecoder.decode((thisCookie.getValue()),"utf-8");
}
}
%>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>주문 정보</title>
</head>
<body>
<jsp:include page = "menu.jsp" />
<div class="jumbotron">
<div class="container">
<h1 class="display-3">주문 정보</h1>
</div>
</div>
<div class="container col-8 alert alert-info">
<div class="text-center">
<h1>영수증</h1>
</div>
<!-- 얻어온 쿠키 정보 중에서 성명, 우편번호, 배송일을 출력하도록 작성한다. -->
<div class="row justify-content-between">
<div class="col-4" align="left">
<strong>배송 주소</strong> <br> 성명 : <% out.println(shipping_name); %> <br>
우편 번호 : <% out.println(shipping_zipCode); %> <br>
주소 : <% out.println(shipping_addressName); %>(<% out.println(shipping_country); %>) <br>
</div>
<div class="col-4" align="right">
<p> <em> 배송일 : <% out.println(shipping_shippingDate); %></em>
</div>
</div>
<div>
<table class="table table-hover">
<tr>
<th class="text-center">도서</th>
<th class="text-center">#</th>
<th class="text-center">가격</th>
<th class="text-center">소계</th>
</tr>
<%
//세션에 저장된 장바구니 정보를 얻어오도록 session 내장 객체의 getAttribute() 메소드를 작성한다.
//장바구니에서 저장된 모든 상품 목록을 하나씩 가져와 출력하도록 작성한다.
int sum = 0;
ArrayList<Product> cartList = (ArrayList<Product>) session.getAttribute("cartlist");
if (cartList == null)
cartList = new ArrayList<Product>();
for (int i = 0; i < cartList.size(); i++){ //상품 리스트 하나씩 출력하기
Product product = cartList.get(i);
int total = product.getUnitPrice() * product.getQuantity();
sum = sum + total;
%>
<tr>
<td class="text-center"><em><%=product.getPname() %></em></td>
<td class="text-center"><%=product.getQuantity() %></td>
<td class="text-center"><%=product.getUnitPrice() %></td>
<td class="text-center"><%=total %> 원</td>
</tr>
<%
}
%>
<!-- 위 92 행의 장바구니에 저장된 모든 상품 목록의 총액을 산출하여 출력하도록 작성한다. -->
<tr>
<td></td>
<td></td>
<td class="text-right"><strong>총액:</strong></td>
<td class="text-center text-danger"><strong><%=sum %></strong></td>
</tr>
</table>
<!-- <이전>, <주문 완료>, <취소> 버튼을 작성한다. -->
<a href="./shippingInfo.jsp?cartId=<%=shipping_cartId%>" class="btn btn-secondary" role="button"> 이전 </a>
<a href="./thankCustomer.jsp" class="btn btn-success" role="button"> 주문 완료</a>
<a href="./checkOutCancelled.jsp" class="btn btn-secondary" role="button"> 취소 </a>
</div>
</div>
<jsp:include page="footer.jsp"/>
</body>
</html>
5. 주문 완료 페이지 작성하기
thankCustomer.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import ="java.net.URLDecoder" %>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>주문 완료</title>
</head>
<body>
<%
String shipping_cartId = "";
String shipping_name = "";
String shipping_shippingDate = "";
String shipping_country = "";
String shipping_zipCode = "";
String shipping_addressName = "";
Cookie[] cookies = request.getCookies();
//쿠키 객체를 얻어와 장바구니 아이디, 배송일의 쿠키 정보를 얻어 오도록 Cookie 객체의 getValue() 메소드를 작성한다.
if (cookies != null){
for ( int i= 0; i < cookies.length; i++){
Cookie thisCookie = cookies[i];
String n = thisCookie.getName();
if (n.equals("Shipping_cartId"))
shipping_cartId = URLDecoder.decode((thisCookie.getValue()),"utf-8" );
if (n.equals("Shipping_shippingDate"))
shipping_shippingDate = URLDecoder.decode((thisCookie.getValue()),"utf-8");
}
}
%>
<jsp:include page = "menu.jsp" />
<div class="jumbotron">
<div class="container">
<h1 class="display-3">주문 완료</h1>
</div>
</div>
<div class="container">
<h2 class="alert alert-danger">주문해주셔서 감사합니다.</h2>
<p> 주문은 <% out.println(shipping_shippingDate); %> 에 배송될 예정입니다 !
<p> 주문번호 : <%out.println(shipping_cartId); %>
</div>
<div class="container">
<p><a href="./products.jsp" class="btn btn-secondary"> « 상품 목록</a>
</div>
<jsp:include page="footer.jsp"/>
</body>
</html>
<%
//세션ㄴ으로 저장된 장바구니 정보를 모두 삭제하도록 session 내장 객체의 invalidate()메소드를 작성한다.
session.invalidate();
//쿠키에 저장된 배송 정보를 모두 삭제하도록 Cookie 객체의 setMaxAge() 메소드를 작성한다.
for (int i = 0; i <cookies.length; i ++ ){
Cookie thisCookie = cookies[i];
String n = thisCookie.getName();
if(n.equals("Shipping_cartId"))
thisCookie.setMaxAge(0);
if(n.equals("Shipping_name"))
thisCookie.setMaxAge(0);
if(n.equals("Shipping_shippingDate"))
thisCookie.setMaxAge(0);
if(n.equals("Shipping_country"))
thisCookie.setMaxAge(0);
if(n.equals("Shipping_zipCode"))
thisCookie.setMaxAge(0);
if(n.equals("Shipping_addressName"))
thisCookie.setMaxAge(0);
response.addCookie(thisCookie);
}
%>
6. 주문 취소 페이지 작성하기
checkOutCancelled.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>주문 취소</title>
</head>
<body>
<jsp:include page = "menu.jsp" />
<div class="jumbotron">
<div class="container">
<h1 class="display-3">주문 취소</h1>
</div>
</div>
<div class="container">
<h2 class="alert alert-danger">주문이 취소되었습니다. </h2>
</div>
<div class="container">
<p><a href="./products.jsp" class="btn btn-secondary"> « 상품 목록</a>
</div>
<jsp:include page="footer.jsp"/>
</body>
</html>