장바구니에 책 담기
dto -> Book.java 멤버변수 추가
private int quantity; // 장바구니에 담은 개수
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
book.jsp 재고수 밑에 수정
<form name="addForm" action="./addCart.jsp?id=<%=book.getBookId()%>" method="post">
<button type="button" class="btn btn-info" onclick="addToCart()">도서주문 »</button>
<a href="./cart.jsp" class="btn btn-warning">장바구니 »</a>
<a href="./books.jsp" class="btn btn-secondary">도서목록 »</a>
</form>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page errorPage="exceptionNoBookId.jsp"%>
<%@page import="dto.Book"%>
<%@page import="java.util.ArrayList"%>
<!-- BookRepository객체 생성 -->
<jsp:useBean id="bookDAO" class="dao.BookRepository" scope="session" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>도서 상세 정보</title>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css" />
</head>
<body>
<%@ include file="menu.jsp"%>
<div class="jumbotron">
<div class="container">
<h1 class="display-4">도서 정보</h1>
</div>
</div>
<%
String id = request.getParameter("id");
Book book = bookDAO.getBookById(id);
%>
<div class="container">
<div class="row">
<div class="col-md-4">
<img src="/upload/<%=book.getFilename()%>" style="width: 100%" />
</div>
<div class="col-md-8">
<h4>
<b>[<%=book.getCategory()%>]<%=book.getName()%></b>
</h4>
<p><%=book.getDescription()%>
<p>
<b>도서코드 : </b><span class="badge badge-danger"> <%=book.getBookId()%></span>
<p>
<b>저자</b> :
<%=book.getAuthor()%>
<p>
<b>출판사</b> :
<%=book.getPublisher()%>
<p>
<b>출판일</b> :
<%=book.getReleaseDate()%>
<p>
<b>총 페이지수</b> :
<%=book.getTotalPages()%>
<p>
<b>재고수</b> :
<%=book.getUnitsInStock()%>
<h4><%=book.getUnitPrice()%>원</h4>
<form name="addForm" action="./addCart.jsp?id=<%=book.getBookId()%>"
method="post">
<button type="button" class="btn btn-info" onclick="addToCart()">도서주문
»</button>
<a href="./cart.jsp" class="btn btn-warning">장바구니 »</a> <a
href="./books.jsp" class="btn btn-secondary">도서목록 »</a>
</form>
</div>
</div>
<hr>
</div>
<%@ include file="footer.jsp"%>
<script>
function addToCart() {
if (confirm('도서를 장바구니에 추가하시겠습니까?')) {
document.addForm.submit();
}
}
</script>
</body>
</html>
출력화면
도서주문 클릭 시
addCart.jsp 파일 생성
<%@page import="java.util.ArrayList"%>
<%@page import="dto.Book"%>
<jsp:useBean id="bookDAO" class="dao.BookRepository" scope="session" />
<%
String id = request.getParameter("id");
if(id == null|| id.trim().equals("")){
response.sendRedirect("books.jsp");
return;//아이디가 없을 경우 도서 목록 페이지로
}
Book book = bookDAO.getBookById(id);
if(book == null){//아이디에 해당 책이 없는 경우 에러페이지로.
response.sendRedirect("./exceptionNoBookId.jsp");
}
// 장바구니 카트리스트를 세션에서 가져온다.(처음일 경우 카트리스트를 만들어 저장.)
ArrayList<Book> list = (ArrayList<Book>)session.getAttribute("cartlist");
if (list == null) {
list = new ArrayList<Book>();
session.setAttribute("cartlist", list);
}
//카트리스트 책을 저장 시 두 가지 경우 ( 1.이미 있을 경우 2.책이 없을 경우)
Boolean isInCart = false;
Book cartBook = null;
for(int i = 0; i<list.size(); i++){
cartBook = list.get(i); //장바구니의 1개의 책을 꺼낸다 .
if(cartBook.getBookId().equals(id)){
isInCart = true;
int newQuantity = cartBook.getQuantity()+1;//갯수 +1
cartBook.setQuantity(newQuantity);//증가한 갯수로 업데이트!
}
}
if (!isInCart) {
//책이 카트에 없을 경우에 갯수를 1로 한 다음 카트리스트에 저장
book.setQuantity(1);
list.add(book);
}
response.sendRedirect("book.jsp?id=" + id);
%>
carts.jsp 파일 생성
<%@page import="dto.Book"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>장바구니</title>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css" />
</head>
<%
String cartId = session.getId();
%>
<body>
<%@ include file="menu.jsp"%>
<div class="jumbotron">
<div class="container">
<h1 class="display-3">장바구니</h1>
</div>
</div>
<div class="container">
<div class="row">
<table width="100%">
<tr>
<td align="left"><a href="./deleteCart.jsp?cartId=<%=cartId%>"
class="btn btn-danger">삭제하기</a></td>
<td align="right"><a href="#" class="btn btn-success">주문하기</a></td>
</tr>
</table>
</div>
<div style="padding-top: 50px">
<table class="table table-hover">
<tr>
<th>도서</th>
<th>가격</th>
<th>수량</th>
<th>소계</th>
<th>비고</th>
</tr>
<%
int sum = 0;
ArrayList<Book> cartList = (ArrayList<Book>) session.getAttribute("cartlist");
if (cartList == null)
cartList = new ArrayList<Book>();
for (int i = 0; i < cartList.size(); i++) { // 도서 리스트 하나씩 출력하기
Book book = cartList.get(i);
int total = book.getUnitPrice() * book.getQuantity();
sum = sum + total;
%>
<tr>
<td><%=book.getBookId()%> - <%=book.getName()%></td>
<td><%=book.getUnitPrice()%></td>
<td><%=book.getQuantity()%></td>
<td><%=total%></td>
<td><a href="./removeCart.jsp?id=<%=book.getBookId()%>"
class="badge badge-danger">삭제</a></td>
</tr>
<%
}
%>
<tr>
<th></th>
<th></th>
<th>총액</th>
<th><%=sum%></th>
<th></th>
</tr>
</table>
<a href="./books.jsp" class="btn btn-secondary">« 쇼핑 계속하기</a>
</div>
<hr>
</div>
<%@ include file="footer.jsp"%>
</body>
</html>
삭제 버튼을 눌렀을 시
id가 넘어감
해당 아이디로 장바구니에 있는 도서 삭제하기
removeCart.jsp 생성
<%@ page import="java.util.ArrayList"%>
<%@ page import="dto.Book"%>
<jsp:useBean id="bookDAO" class="dao.BookRepository" scope="session" />
<%
// id가 없거나 null 인경우
String id = request.getParameter("id");
if (id == null || id.trim().equals("")) {
response.sendRedirect("books.jsp");
return;
}
// id는 있는데 삭제할 도서가 없을 경우
Book book = bookDAO.getBookById(id);
if (book == null) {
response.sendRedirect("./exceptoinNoBookId.jsp");
}
// 정상적인 경우 카트리스트에서 id로 책을 찾아서 삭제한다.
ArrayList<Book> cartList = (ArrayList<Book>) session.getAttribute("cartlist");
Book removeBook = null;
for (int i = 0; i < cartList.size(); i++) {
removeBook = cartList.get(i);//장바구니에서 책을 한 권씩 반복함.
if (removeBook.getBookId().equals(id)) {
cartList.remove(removeBook);
}
}
response.sendRedirect("cart.jsp");
%>
중요한 부분
삭제 클릭 시 화면 출력
왼쪽 "삭제하기" 버튼은 장바구니 전체를 삭제하는거임 .
-> 세션 전체를 삭제하면됨 .
deleteCart.jsp 파일 생성
<%
session.removeAttribute("cartlist");
response.sendRedirect("cart.jsp");
%>
removeAttribute : session 에 cartlist를 삭제한다.
.참고)
cart.jsp
<%
//브라우저 별 세션ID
String cartId = session.getId();
%>
브라우저 별 세션 ID 는 로 확인가능함(브라우저 마다 다름)
'BACKEND > Jsp' 카테고리의 다른 글
북마켓 프로젝트 9 (0) | 2023.09.26 |
---|---|
북마켓 프로젝트 8 (0) | 2023.09.26 |
북마켓 프로젝트 6 (0) | 2023.09.25 |
북마켓 프로젝트 5 (0) | 2023.09.22 |
북마켓 프로젝트 4 (0) | 2023.09.22 |