JSP

 

 

 

 

 

 

 메뉴 상단 공통 출력 장바구니 목록 보기

package net.macaronics.web.controll.common;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.dto.MemberVO;

public class CommonList {
	final static Logger logger = LogManager.getLogger(CommonList.class);

	public static void getCommon(HttpServletRequest request) {
		HttpSession session = ((HttpServletRequest) request).getSession();
		MemberVO loginUser = (MemberVO) session.getAttribute("loginUser");

		if (loginUser != null) {
			CartDAO cartDAO = CartDAO.getInstance();
			List<CartVO> cartList = cartDAO.listCart(loginUser.getId());
			int totalPrice = 0;
			for (CartVO cartVO : cartList) {
				totalPrice += cartVO.getPrice2() * cartVO.getQuantity();
			}

			request.setAttribute("cartList", cartList);
			request.setAttribute("totalPrice", totalPrice);
		}

	}

}

 

 

 

장바구니 담기

 

CartInsertAction

package net.macaronics.web.controll;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.macaronics.web.controll.action.Action;
import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.dto.MemberVO;

public class CartInsertAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String url = "MacaronicsServlet?command=product_detail&pseq=";

		HttpSession session = request.getSession();
		MemberVO loginUser = (MemberVO) session.getAttribute("loginUser");
		if (loginUser == null) {
			url = "MacaronicsServlet?command=login_form";
		} else {

			// 장바구니에 등록하기
			CartVO cartVO = new CartVO();
			cartVO.setId(loginUser.getId());
			
			int pseq=Integer.parseInt(request.getParameter("pseq"));		
			cartVO.setPseq(pseq);
			cartVO.setQuantity(Integer.parseInt(request.getParameter("quantity")));
			CartDAO cartDAO = CartDAO.getInstance();
			cartDAO.insertCart(cartVO);
			url += pseq;
		}
		response.sendRedirect(url);
	}

}

 

CartInsertAjax

package net.macaronics.web.controll;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.spi.LoggerFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.macaronics.web.controll.action.Action;
import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.dto.MemberVO;

public class CartInsertAjax implements Action{
	
	private static final Logger logger =LogManager.getLogger(CartInsertAjax.class);
	
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
	
		HttpSession session =request.getSession();
		MemberVO loginUser=(MemberVO)session.getAttribute("loginUser");
		PrintWriter out =response.getWriter();
	
		if(loginUser==null){
			out.println("로그인을 먼저 하세요.");
		}else{		
			//장바구니에 등록하기
			CartVO cartVO=new CartVO();
			cartVO.setId(loginUser.getId());
			cartVO.setPseq(Integer.parseInt(request.getParameter("pseq")));
			cartVO.setQuantity(Integer.parseInt(request.getParameter("quantity")));
			CartDAO cartDAO=CartDAO.getInstance();
			cartDAO.insertCart(cartVO);
			
			out.println("success");
		}
		
	}
	
	
}





 

 

 

장바구니 목록 보기

CartListAction

package net.macaronics.web.controll;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.macaronics.web.controll.action.Action;
import net.macaronics.web.controll.common.CommonList;
import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.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 loginUser=(MemberVO)session.getAttribute("loginUser");
		if(loginUser==null){
			url="MacaronicsServlet?command=login_form";
			
		}else{
			//공통 리스트 장바구니 목록
			//MacaronicsServlet 존재
		}
		request.getRequestDispatcher(url).forward(request, response);
		
	}
	
	
	

}











 

 

장바구니 삭제하기

CartDeleteAction

package net.macaronics.web.controll;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.macaronics.web.controll.action.Action;
import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dto.MemberVO;

public class CartDeleteAction implements Action {
	final static Logger logger = LogManager.getLogger(CartDeleteAction.class);

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String url = "MacaronicsServlet?command=cart_list";

		String[] cseqArr = request.getParameterValues("cseq");
		MemberVO member = (MemberVO) request.getSession().getAttribute("loginUser");
		try {
			for (String cseq : cseqArr) {
				logger.info(cseq);
				CartDAO dao = CartDAO.getInstance();
				dao.deleteCart(Integer.parseInt(cseq), member.getId());
			}
			response.sendRedirect(url);
		} catch (Exception e) {
			e.printStackTrace();
			response.sendRedirect(url);
		}

	}

}

 

 

CartDeleteAjaxAction

package net.macaronics.web.controll;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.macaronics.web.controll.action.Action;
import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dto.MemberVO;

public class CartDeleteAjaxAction implements Action {
	final static Logger logger = LogManager.getLogger(CartDeleteAjaxAction.class);

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		String cseq = request.getParameter("cseq");
		MemberVO member = (MemberVO) request.getSession().getAttribute("loginUser");
		try {
			logger.info(cseq);
			CartDAO dao = CartDAO.getInstance();
			dao.deleteCart(Integer.parseInt(cseq), member.getId());
			out.println("success");
		} catch (Exception e) {
			e.printStackTrace();
			out.print("failed");
		}

	}

}

 

Url 매핑 

ActionFactory

package net.macaronics.web.controll.factory;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.macaronics.web.controll.CartDeleteAction;
import net.macaronics.web.controll.CartDeleteAjaxAction;
import net.macaronics.web.controll.CartInsertAction;
import net.macaronics.web.controll.CartInsertAjax;
import net.macaronics.web.controll.CartListAction;
import net.macaronics.web.controll.IndexAction;
import net.macaronics.web.controll.JoinFormAction;
import net.macaronics.web.controll.LogOutAction;
import net.macaronics.web.controll.LoginFormAction;
import net.macaronics.web.controll.ProductDetailAction;
import net.macaronics.web.controll.ProductKindAction;
import net.macaronics.web.controll.action.Action;

public class ActionFactory {
	final Logger logger =LogManager.getLogger(ActionFactory.class);
	//싱글톤설정
	private static ActionFactory instance;
	private ActionFactory(){
		super();
	}
	public static ActionFactory getInstance(){
		if(instance==null){
			instance=new ActionFactory();
		}
		return instance;
	}
	
	
	//command 에서 넘어온 파라미터 값이 존재하면 실행
	//즉 ,존재하면 url 만 실행된다. 
	public Action getAction(String command){
		Action action=null;
		logger.info("ActionFactory : {}  ", command);
		
		if(command.equals("index")) action=new IndexAction();  
		else if(command.equals("product_detail")) action=new ProductDetailAction();//상품 상세보기
		else if(command.equals("category")) action=new ProductKindAction(); //상품종류별 보기
		else if(command.equals("join_form"))action=new JoinFormAction(); //회워가입
		else if(command.equals("login_form"))action=new LoginFormAction(); //로그인
		else if(command.equals("logout")) action=new LogOutAction(); //로그아웃
		else if(command.equals("cart_insert"))action=new CartInsertAction(); //장바구니에 담기
		else if(command.equals("cart_list")) action=new CartListAction(); //장바구니 목록
		else if(command.equals("cart_delete")) action=new CartDeleteAction(); //장바구니 삭제
		else if(command.equals("cart_ajax")) action=new CartInsertAjax(); //장바구니 ajax  담기
		else if(command.equals("cart_delete_ajax")) action=new CartDeleteAjaxAction(); //장바구니 ajax  삭제
		
		return action;
	}
	
	
	
	
}

 

 

DAO 

CartDAO

package net.macaronics.web.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import config.MybatisService;
import net.macaronics.web.dto.CartVO;

public class CartDAO {
	private final static Logger logger =LogManager.getLogger(CartDAO.class);
	
	//Mybatis 
	private SqlSession sqlSession;
	
	// CartDAO 싱글톤 객체 만들기
	private static CartDAO instance =new CartDAO();
	private CartDAO(){
		
	}
	
	public static CartDAO getInstance(){
		if(instance==null){
			instance=new CartDAO();
		}
		return instance;
	}
	
	
	//장바구니 담기
	public void insertCart(CartVO cartVO){
		try{
			sqlSession=MybatisService.getFactory().openSession();
			sqlSession.insert("cart.insertCart", cartVO);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			sqlSession.commit();
			MybatisService.sessionClose(sqlSession);
		}
	}
	
	//장바구니 목록
	public List<CartVO> listCart(String userid){
		List<CartVO> cartList=new ArrayList<>();
		try{
			sqlSession=MybatisService.getFactory().openSession();
			cartList=sqlSession.selectList("cart.listCart", userid);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
		  sqlSession.commit();
		  MybatisService.sessionClose(sqlSession);
		}
		return cartList;
	}
	
	
	
	//장바구니 삭제
	public void deleteCart(int cseq, String id){
		try{
			sqlSession=MybatisService.getFactory().openSession();
			Map<String, Object> map=new HashMap<>();
			map.put("cseq", cseq);
			map.put("id", id);
			sqlSession.delete("cart.deleteCart", map);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			sqlSession.commit();
			MybatisService.sessionClose(sqlSession);
		}
	}
	

	
	
}




 

 

DTO

CartVO

public class CartVO {
   
	private int cseq;  //장바구니 번호
	private String id;  //회원아이디
	private int pseq;  //상품번호
	private String mname;  //회원이름
	private String pname; //상품이름
	private int quantity; //수량
	private int price2; //가격
	private String image;
	private Timestamp indate;

setter, getter

 

 

Mybatis

cart.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cart">
	<!-- id="태그의 식별자" resultType="sql 명령어의 리턴타입(레코드의 자료형)" 샵{변수} => 입력매개변수 -->

	<insert id="insertCart">
	 insert into tbl_cart(cseq, id, pseq, quantity) values( cart_seq.nextval, #{id} , #{pseq} , #{quantity})
	</insert>

	<select id="listCart" resultType="net.macaronics.web.dto.CartVO">
		select * from CART_VIEW where id=#{id} order by cseq desc
	</select>
	
	<delete id="deleteCart">
		delete tbl_cart where cseq=#{cseq} and id=#{id}
	</delete>

</mapper>


	
	
	

 

 

SQL

create or replace view cart_view
as
select o.cseq, o.id, o.pseq, m.name mname, p.name pname, 
o.quantity, o.indate, p.price2, o.result 
from tbl_cart o, tbl_member m, tbl_product p 
where o.id = m.id and o.pseq = p.pseq
and result='1'

 

 

View

 

cartList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>   
<!DOCTYPE html>
<html>
<head>
<jsp:include page="../include/Header.jsp" />  
 </head> 
<body>
<jsp:include page="../include/HeaderMenu.jsp" />


  <!-- catg header banner section -->
  <section id="aa-catg-head-banner">
   <img src="/dailyShop/img/slider/4.jpg" alt="fashion img" height="300" style="margin-left: auto; margin-right: auto; display: block;">
   <div class="aa-catg-head-banner-area">
     <div class="container">
     </div>
   </div>
  </section>
  <!-- / catg header banner section -->

 <!-- Cart view section -->
 <section id="cart-view">
   <div class="container">
     <div class="row">
       <div class="col-md-12">
         <div class="cart-view-area">
           <div class="cart-view-table">
             
             <form action="" name="form1">
               <div class="table-responsive">
                  <table class="table">
                    <thead>
                      <tr>
                        <th>삭제</th>
                        <th>이미지</th>
                        <th>상품</th>
                        <th>가격</th>
                        <th>수량</th>
                        <th>합계</th>
                      </tr>
                    </thead>
                    <tbody>
                       
                    <c:choose>
	                    <c:when test="${cartList.size() ==0 }">
	                    	<tr>
	                    	 <td colspan="6">장바구니가 비었습니다.</td>
	                    	</tr>
	                    </c:when>
	                    <c:otherwise>
	                    <c:forEach items="${cartList }" var="cartVO">
	                    
		                   <tr>
	                        <td>
	                          <a class="remove" href="#" onclick="go_cart_delete(${cartVO.cseq})"><fa class="fa fa-close"></fa></a>
	                          <input type="hidden" name="cseq" value="${cartVO.cseq}">
	                        </td>
	                        <td><a href="MacaronicsServlet?command=product_detail&pseq=${cartVO.pseq}"><img src="images/${cartVO.image}" alt="img"></a></td>
	                        <td><a class="aa-cart-title" href="MacaronicsServlet?command=product_detail&pseq=${cartVO.pseq}">${cartVO.pname}</a></td>
	                        <td><fmt:formatNumber value="${cartVO.price2}" type="currency"  /></td>
	                        <td><input class="aa-cart-quantity" type="number" value="${ cartVO.quantity}"  min="1" max="100" readonly="readonly"></td>
	                        <td><fmt:formatNumber  value="${cartVO.price2*cartVO.quantity }"  type="currency" />  </td>
	                       </tr>
	                       
	                      
	                      </c:forEach>
	                    </c:otherwise>
                    </c:choose>
					   </tbody>
                  </table>
                 
                    <input type="hidden" value="cart_delete" name="command">
                </div>
             </form>
             
            
            <c:if test="${cartList.size() !=0 }"> 
	             <!-- Cart Total view -->
	             <div class="cart-view-total">
	               <h4 style="text-align: center;">장바구니 합계</h4>
	               <table class="aa-totals-table">
	                 <tbody>
	                   <tr>
	                     <th>배송비(3만원 이상 무료)</th>
	                     <td><fmt:formatNumber type="currency" value="${totalPrice >30000 ? 0 :3000 }" /></td>          
	                   </tr>
	                   <tr>
	                     <th>합계</th>
	                     <td><fmt:formatNumber value="${totalPrice > 30000 ?  totalPrice: totalPrice+3000 }" type="currency"  /></td>
	                   </tr>
	                 </tbody>
	               </table>
	               <a href="#" class="aa-cart-view-btn">주문하기</a>
	                <a href="MacaronicsServlet?command=index" class="aa-cart-view-btn">쇼핑 계속하기</a>
	                <a href="#" onclick="go_cart_all_delete()" class="btn btn-danger">장바구니 비우기</a>
	             </div>         
            </c:if> 
             
             
             
           </div>
         </div>
       </div>
     </div>
   </div>
 </section>
 <!-- / Cart view section -->




<jsp:include page="../include/Footer.jsp" />>

 

 

javascript

<script>
//장바구니 에 담기

function go_cart(){
	var loginUser='${sessionScope.loginUser}';
	if(loginUser==null || loginUser==''){
		alert("로그인을 먼저 하세요.");
		return;
	}
	if(document.formm.quantity.value==""){
		alert("수량을 입력하여 주세요.");
		document.formm.quantity.focus();
	}else{
		$("input[name=command]").val("cart_insert");
		document.formm.submit();
	
	}
	
}

$(function(){

	
	$(".cart-ajax").click(function(event){
		event.preventDefault();
		pseq=$(this).attr("data-pseq");
		
		$.ajax({
			url:"MacaronicsServlet?command=cart_ajax",
			type:"post",
			dataType:"text",
			data : {
				pseq:pseq,
				quantity:1
			},
			success:function(result){
				
				if($.trim(result)=='success'){
					if(confirm("장바구니에 담았습니다. 장바구니로 이동하시겠습니까?")){
						
						location.href="/MacaronicsServlet?command=cart_list";
					}		
				}else{
					alert($.trim(result));
				}
			}
		});
	});

	

});
function go_cart_delete(cseq){
	
	if(confirm("정말 삭제하시겠습니까?")){
		location.href="MacaronicsServlet?command=cart_delete&cseq="+cseq;		
	}
	
}

function go_cart_all_delete(){
	
	if(confirm("정말 삭제하시겠습니까?")){
		document.form1.submit();
	}
	
}

function go_cart_ajax_delete(cseq){
	
	if(confirm("정말 삭제하시겠습니까?")){
		
		$.ajax({
			url:"MacaronicsServlet?command=cart_delete_ajax",
			type:"post",
			data:{cseq:cseq},
			success:function(result){
				if($.trim(result)=='success'){
					alert("삭제 했습니다.")
					location.reload();
				}				
			}
			
		});
		
	}
	
}
 
</script>

 

 

 

제작 : macaronics.net - Developer  Jun Ho Choi

소스 :  https://github.com/braverokmc79/jsp_sin

 

${request.getContextPath() } 처리를 안한 부분이 있으므로 

루트 설정( http://macaronics.net/index.php/m01/jsp/view/1352)    및 server.xml  에서 DB 컨넥션 설정은 필수 설정이다.

 

 

 

about author

PHRASE

Level 60  라이트

철 그른 동남풍 , 얼토당토않은 흰소리를 함을 이르는 말.

댓글 ( 4)

댓글 남기기

작성