JSP, Servlet, MySQL/JSP - webmarket

JSP Servlet 쿠키 : 주문 처리 페이지 만들기 2

샤리미 2024. 2. 22. 01:47
728x90
반응형

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"> &laquo; 상품 목록</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"> &laquo; 상품 목록</a>
	</div>
	<jsp:include page="footer.jsp"/>
</body>
</html>

 

 

장바구니에 상품을 넣고 주문하기 버튼을 누른다.

 

 

배송정보를 입력하는 폼이 나온다. 모두 입력후 등록을 눌러준다.

 

 

 

폼에 정보를 입력후 넘어가 보자.

 

 

 

 

앞에서 입력한 정보가 그대로 넘어간것을 볼수 있다.

 

 

 

 

주문완료버튼을 누르면 주문해주셔서 감사하다는 문구와, 앞에 입력한 배송일자, 주문번호가 제대로 뜨는것을 볼 수 있다.

 

 

 

 

 

취소버튼을 누르면 주문이 취소된것을 알 수 있다.

728x90
반응형