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);}
}
상품 삭제 후