WEB/ERMaster
[ERMaster] shoppingmall - cart
hvoon
2022. 9. 10. 12:34
Dto
package com.sam.shop.dto;
import java.sql.Timestamp;
public class CartVO {
private Integer cseq;
private String id;
private Integer pseq;
private String mname;
private String pname;
private Integer quantity;
private Integer price2;
private Timestamp indate;
private String result;
public Integer getCseq() {
return cseq;
}
public void setCseq(Integer cseq) {
this.cseq = cseq;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Integer getPseq() {
return pseq;
}
public void setPseq(Integer qseq) {
this.pseq = qseq;
}
public String getMname() {
return mname;
}
public void setMname(String mname) {
this.mname = mname;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public Integer getQuantity() {
return quantity;
}
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
public Integer getPrice2() {
return price2;
}
public void setPrice2(Integer price2) {
this.price2 = price2;
}
public Timestamp getIndate() {
return indate;
}
public void setIndate(Timestamp indate) {
this.indate = indate;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
Dao
package com.sam.shop.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.sam.shop.dto.CartVO;
import com.sam.shop.util.Dbman;
public class CartDao {
private CartDao() {}
private static CartDao itc = new CartDao();
public static CartDao getInstance() { return itc; }
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
}
상품 장바구니에 담기
function go_cart(){
if(document.formm.quantity.value==""){
alert("수량을 입력하세요");
document.formm.quantity.focus();
} else{
document.formm.action="shop.do?command=cartInsert";
document.formm.submit();
}
}

else if(command.equals("cartInsert")) ac=new CartInsertAction();
package com.sam.shop.controller.action.mypage;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.sam.shop.controller.action.Action;
import com.sam.shop.dao.CartDao;
import com.sam.shop.dto.CartVO;
import com.sam.shop.dto.MemberVO;
public class CartInsertAction implements Action {
@Override
public void execute(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// cartvo에 전달 파라미터를 넣고
// cart 테이블에 레코드를 추가함
// cart 관련(mypage 관련) 동작은
// 로그인 이후에 유효한 동작이므로
// 현재 로그인 상태인지 먼저 점검함
HttpSession session =request.getSession();
MemberVO mvo=(MemberVO)session.getAttribute("loginUser");
String url="";
if(mvo==null) {
url="shop.do?command=loginForm";
} else {
CartVO cvo=new CartVO();
cvo.setId(mvo.getId());
cvo.setPseq(Integer.parseInt(request.getParameter("pseq")));
cvo.setQuantity(Integer.parseInt(request.getParameter("quantity")));
CartDao cdao=CartDao.getInstance();
cdao.insertCart(cvo);
url="shop.do?command=cartList";
}
response.sendRedirect(url);
}
}
CartDao에 insertCart 생성
public void insertCart(CartVO cvo) {
String sql="insert into cart(cseq, id, pseq, quantity)"
+ "values(cart_seq.nextVal,?,?,?)";
con=Dbman.getConnection();
try {
pstmt=con.prepareStatement(sql);
pstmt.setString(1, cvo.getId());
pstmt.setInt(2, cvo.getPseq());
pstmt.setInt(3, cvo.getQuantity());
pstmt.executeUpdate();
} catch (SQLException e) {e.printStackTrace();
} finally { Dbman.close(con, pstmt, rs);}
}
else if(command.equals("cartList")) ac=new CartListAction();
package com.sam.shop.controller.action.mypage;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.sam.shop.controller.action.Action;
import com.sam.shop.dao.CartDao;
import com.sam.shop.dto.CartVO;
import com.sam.shop.dto.MemberVO;
public class CartListAction implements Action {
@Override
public void execute(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String url="mypage/cartList.jsp"; // 최종 목적지
HttpSession session =request.getSession();
MemberVO mvo=(MemberVO)session.getAttribute("loginUser");
if(mvo==null) {
url="shop.do?command=loginForm";
} else {
// 로그인 유저의 아이디로
// 카트 리스트를 검색해서 리턴 받음
CartDao cdao=CartDao.getInstance();
ArrayList<CartVO> list=cdao.selectCart(mvo.getId());
request.setAttribute("cartList", list);
int totalPrice=0;
for(CartVO cvo:list)
totalPrice+=(cvo.getPrice2()*cvo.getQuantity());
request.setAttribute("totalPrice", totalPrice);
}
request.getRequestDispatcher(url).forward(request, response);
}
}
CartDao에 selectCart 생성
public ArrayList<CartVO> selectCart(String id) {
ArrayList<CartVO> list=new ArrayList<CartVO>();
String sql="select*from cart_view where id=? and result='1'";
con=Dbman.getConnection();
try {
pstmt=con.prepareStatement(sql);
pstmt.setString(1, id);
rs=pstmt.executeQuery();
while(rs.next()) {
CartVO cvo=new CartVO();
cvo.setCseq(rs.getInt("cseq"));
cvo.setId(rs.getString("id"));
cvo.setMname(rs.getString("mname"));
cvo.setPseq(rs.getInt("pseq"));
cvo.setPname(rs.getString("pname"));
cvo.setQuantity(rs.getInt("quantity"));
cvo.setPrice2(rs.getInt("price2"));
cvo.setIndate(rs.getTimestamp("indate"));
list.add(cvo);
}
} catch (SQLException e) {e.printStackTrace();
} finally { Dbman.close(con, pstmt, rs);}
return list;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="../header.jsp" %>
<%@ include file="sub_image_menu.jsp" %>
<article>
<h2>Cart List</h2>
<form name="formm" method="post">
<c:choose>
<c:when test="${cartList.size()==0}">
<h3 style="color:red; text-align:center;">
장바구니가 비었습니다</h3>
</c:when>
<c:otherwise>
<table id="cartList">
<tr><th>상품평</th><th>수 량</th><th>가 격</th>
<th>주문일</th><th>삭 제</th></tr>
<c:forEach items="${cartList }" var="cartVO">
<tr>
<td><h3>${cartVO.pname }</h3></td>
<td>${cartVO.quantity }</td>
<td>${cartVO.price2 }</td>
<td><fmt:formatNumber
value="${cartVO.price2*cartVO.quantity}"
type="currency"/></td>
<td><fmt:formatDate
value="${cartVO.indate}"
type="date"/></td>
<td><input type="checkbox" name="cseq"
value="${cartVO.cseq }"></td>
</tr>
</c:forEach>
<tr>
<th colspan="2">총 액</th>
<th colspan="2">
<fmt:formatNumber value="${totalPrice }"
type="currency"/></th>
<th><a href="#" onClick="go_cart_delete();">
<h3>삭제하기</h3></a></th></tr>
</table>
</c:otherwise>
</c:choose>
<div id="buttons" style="float:right">
<input type="button" value="계속 쇼핑" class="cancel"
onclick="loction.href='shop.do?command=index'";>
<c:if test="${cartList.size()!=0 }">
<input type="button" value="주문하기" class="submit"
onclick="go_order_insert();">
</c:if>
</div>
</form>
</article>
<%@ include file="../footer.jsp" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta charset="UTF-8">
<div id="sub_img">
<img src="images/mypage/sub_img.jpg"
style="border-radius:20px 20px 20px 20px;">
</div>
<div class="clear"></div>
<nav id="sub_menu">
<ul>
<li><a href="shop.do?command=cartList">
장바구니(cart)내역</a></li>
<li><a href="shop.do?command=mypage">
진행중인 주문내역</a></li>
<li><a href="shop.do?command=orderAll">
총 주문내역</a></li>
<li><a href="#" onclick="withdrawalConfirm();">
회원탈퇴</a></li>
</ul>
</nav>

장바구니에 담겨있는 상품 삭제하기
function go_cart_delete(){
// 자바스크립트에서 jsp페이지내에 있는 동일한 name의 두개 이상의
// 입력란(input 태그)를은 하나의 이름의 배열로 인식함
// documnet.formm.cseq()
// 그말은 곧 배열의 크기를 나타내는 length 속성이 존재한다는 뜻이며
// 배열내의 요소 갯수를 저장하고 있음
// 만약 input 태그가 여러개가 아니고 한개만 존재하는 상태라면
// length 값은 undefined가 됨
// 혹시라도 사용자가 체크박스를 한개도 체크하지 않고
// 삭제버튼을 틀렸나를 점검함
var count=0;
if(document.formm.cseq.length==undefined){
// 체크박스가 한개인 경우
if(document.formm.cseq.checkd==true)
count++;
}else{
// 체크박스가 두개 이상인 경우
for(var i=0; i<document.formm.cseq.length; i++){
if(document.formm.cseq[i].checked==true)
count++;
}
}
if(count==0)
alert("삭제할 항목을 선택해주세요");
else{
document.formm.action="shop.do?command=cartDelete";
document.formm.submit();
// jsp파일에 있는 체크된 checkbox들의 value들(cseq 값들)이
// 배열로 전송됨
}
}
else if(command.equals("cartDelete")) ac=new CartDeleteAction();
package com.sam.shop.controller.action.mypage;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sam.shop.controller.action.Action;
import com.sam.shop.dao.CartDao;
public class CartDeleteAction implements Action {
@Override
public void execute(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String[] cseqArr=request.getParameterValues("cseq");
CartDao cdao=CartDao.getInstance();
for(String cseq:cseqArr)
cdao.deleteCart(Integer.parseInt(cseq));
response.sendRedirect("shop.do?command=cartList");
}
}
CartDao에 deleteCart 생성
public void deleteCart(int cseq) {
String sql="delete from cart where cseq=?";
con=Dbman.getConnection();
try {
pstmt=con.prepareStatement(sql);
pstmt.setInt(1, cseq);
pstmt.executeUpdate();
} catch (SQLException e) {e.printStackTrace();
} finally { Dbman.close(con, pstmt, rs);}
}
