kjh95.tistory.com/246

    웹스토어(model1) 첫 단계 예제

     

    JSP | Bootstrap 자바빈 활용 웹스토어 예제 DTO DAO ☆☆☆ | MVC model 1

    부트스트랩 include 시간 나타내기 예제 welcome.jsp <%@page import="java.util.Calendar"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 스토어..

    kjh95.tistory.com

     

    웹스토어 상품주문(장바구니 기능) 예제

    Product.jsp DTO 추가

    package kr.gov.dto;
    
    /*
     *  *자바 빈(bean)을 이요한 정보 조회
     *  	1.자바 빈
     *  		1) Java EE 프로그래밍시 여러 객체를 거치면서 만들어지는 데이터를 저장하거나 전달하는데 사용되는 클래스.
     *  		2) 자바의 DTO(Data Transfer Object, 데이터 전송 객체)클래스, VO(Value Object, 값객체) 클래스와
     *  		   같은 개념.
     *  	2.자바 빈 특징
     *  		1) 속성의 접근 제한자는 private이다. 
     *  		2) 각속성(attribute, property)은 각각의 setter/getter를 가진다.
     *  		3) 인자 없는 생성자를 반드시 가지며 다른 생성자도 추가할수 있다.
     */
    //Product라는 클래스 => 자바빈의 객체가 되는 것.
    public class Product {
    	
    	private String productId;    //상품 아이디
    	private String pname;         //상품
    	private Integer unitprice;   //상품가격
    	private String description;  //상품 설명
    	private String menufecturer; //제조사
    	private String category;     //분류
    	private long numberOfstock;  //재고 수
    	private String condition;    //신상품 or 중고품 or 재생품
    	private String filename;     //제품이미지
    	private int quantity; 		 //장바구니에 담은 개수
    	
    	public Product() {
    	
    	}
    	
    	//생성자 오버로드
    	public Product(String productId, String pname, Integer unitprice) {
    		super();
    		this.productId = productId;
    		this.pname = pname;
    		this.unitprice = unitprice;
    	}
    	
    	//getter, setter
    	public String getProductId() {
    		return productId;
    	}
    
    	public void setProductId(String productId) {
    		this.productId = productId;
    	}
    
    	public String getPname() {
    		return pname;
    	}
    
    	public void setPname(String pname) {
    		this.pname = pname;
    	}
    
    	public Integer getUnitprice() {
    		return unitprice;
    	}
    
    	public void setUnitprice(Integer unitprice) {
    		this.unitprice = unitprice;
    	}
    
    	public String getDescription() {
    		return description;
    	}
    
    	public void setDescription(String description) {
    		this.description = description;
    	}
    
    	public String getMenufecturer() {
    		return menufecturer;
    	}
    
    	public void setMenufecturer(String menufecturer) {
    		this.menufecturer = menufecturer;
    	}
    
    	public String getCategory() {
    		return category;
    	}
    
    	public void setCategory(String category) {
    		this.category = category;
    	}
    
    	public long getNumberOfstock() {
    		return numberOfstock;
    	}
    
    	public void setNumberOfstock(long numberOfstock) {
    		this.numberOfstock = numberOfstock;
    	}
    
    	public String getCondition() {
    		return condition;
    	}
    
    	public void setCondition(String condition) {
    		this.condition = condition;
    	}
    
    	public String getFilename() {
    		return filename;
    	}
    
    	public void setFilename(String filename) {
    		this.filename = filename;
    	}
    
    	public int getQuantity() {
    		return quantity;
    	}
    
    	public void setQuantity(int quantity) {
    		this.quantity = quantity;
    	}
    	
    }

     

    product.jsp  form추가 헨들러 추가

    <%@page import="kr.gov.dto.Product"%>
    <%@page import="kr.gov.dao.ProductRepository"%>
    <%@page errorPage="exceptionNoProductId.jsp" %> <!-- id값이 유효하지 않으면 에러페이지로 이동시킨다. -->
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%-- <jsp:useBean id="productDAO" class="kr.gov.dao.ProductRepository" scope="session"/> --%>
    
    <% request.setCharacterEncoding("UTF-8"); %>
        
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>상품 상세 정보</title>
      <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"> 
    </head>
    <body>
    	<jsp:include page="menu.jsp"/>
    	
    	<div class="jumbotron">
    		<div class="contaner">
    			<h1 class="display-3">상품 정보</h1>
    		</div>
    	</div>
    	
    	<%	
    		//넘어온 상품 아이디값을 얻었다.
    		String id =request.getParameter("id");
    		
    		ProductRepository dao = ProductRepository.getInstance();
    		
    		//넘어온 상품아이디값을 이용해 실제 해당되는 Product객체를 얻음.
    		Product product = dao.getProductById(id);
    	%>
    	
    	<div class="container">
    		<div class="row">
    			<div class="col-md-5">
    				<%-- <img alt="" src="C:/workspace-jsp/upload/<%=product.getFilename() %>" style="width:100%"> --%>
    				<img alt="" src="${pageContext.request.contextPath}/resources/images/<%=product.getFilename() %>" style="width:100%">
    			</div>
    			<div class="col-md-6">
    				<h3><%=product.getPname() %></h3>
    				<p><%=product.getDescription() %></p>
    				<p><b>상품 코드 :</b><span class="badge badge-danger" ><%=product.getProductId() %><span></b></p>
    				<p><b>제조사 : </b><%=product.getMenufecturer() %></p>
    				<p><b>분류 : </b><%=product.getCategory() %></p>
    				<p><b>제고 수 : </b><%=product.getNumberOfstock() %></p>
    				<h4><%=product.getUnitprice() %>원</h4>
    				
    				<p><form name="addForm" action="./addCart.jsp?id=<%=product.getProductId() %>" method="post">
    				<!-- 상품 주문을 클릭하면 자바스크립트 핸들러 함수 addToCart()호출 -->
    					<a href="#" class="btn btn-info" onclick="addToCart()">상품 주문&raquo;</a>
    					<!-- 장바구니 버튼 추가, 클릭시 /cart.jsp로 이동함 -->
    					<a href="./cart.jsp" class="btn btn-warning">장바구니&raquo;</a>
    					<a href="./products.jsp" class="btn btn-secondary">상품 목록&raquo;</a>
    				</form>
    				
    				<!--
    				<p><a href="addProduct.jsp" class="btn btn-info">상품 등록&raquo;</a></p>
    				<a href="./products.jsp" class="btn btn-secondary">상품 목록&raquo;</a> 
    				-->
    			</div>
    		</div>
    		<hr>
    	</div>
    	<jsp:include page="footer.jsp"/>
    	 
    	<script type="text/javascript">
    		/* 장바구니에 추가하기 위한 헨들러 함수 */
    		function addToCart() {
    			if(confirm('해당 상품을 장바구니에 추가하겠습니까?')) {	/* confirm() : 사용자가 선택할 때 이용(확인, 취소) */
    				document.addForm.submit();
    			}
    			else {
    				document.addForm.reset();
    			}
    		}
    	</script>
    </body>
    </html>

     

    products.jsp(상품목록)에서 상세정보를 선택하여 실행한 페이지

    버튼 추가 배열변경

     

     

    addCart.jsp  파일추가(상품주문 처리) / 세션에 따라 상품 주문받기

    <%@page import="java.util.ArrayList"%>
    <%@page import="kr.gov.dto.Product"%>
    <%@page import="kr.gov.dao.ProductRepository"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>상품주문</title>
    </head>
    <body>
    	<%
    		//전송된 상품 id
    		String id = request.getParameter("id");
    		
    		//상품 id 넘어오지 않았을때 강제로 products.jsp 이동시키고 종료
    		if(id == null || id.trim().equals("")) {
    			response.sendRedirect("products.jsp");
    			return;
    		}
    		
    		//상품 데이터 접근 클레스의 인스턴스 생성
    		ProductRepository dao = ProductRepository.getInstance();
    		
    		//해당 id값을 이용해서 상품상세정보 얻어오는 코드
    		Product product = dao.getProductById(id);
    		if(product == null) {	//해당 상품이 없을경우 
    			response.sendRedirect("exceptionNoProductId.jsp"); 
    		}
    		
    		//모든 상품을 가져옴
    		ArrayList<Product> goodList = dao.getAllProducts();
    		Product goods = new Product();
    		for(int i=0; i<goodList.size(); i++) {
    			/* 상품리스트 중에서 사용자 주문을 한 그 상품의 id가 일치하는 코드를 얻어서 Product에 대입 */
    		 	goods = goodList.get(i);
    		 	if(goods.getProductId().equals(id)) {
    		 		break;
    		 	}
    		}
    		
    		//세션 속성의 이름이 cardList인 session정보(장바구니에 담겨져있는 물품 목록)를 가져와서 ArrayList에 대입
    		ArrayList<Product> list = (ArrayList<Product>)session.getAttribute("cardList");
    		
    		/* cardlist값이 null이라면(처음엔 당연히 null 담겨있는게 없으니까) 새로운 ArrayList를 만들고
    			세션에 ArrayList만들고 세션에 cardlist이름으로 list라는 값을 대입*/
    		if(list == null) {
    			list = new ArrayList<>();
    			session.setAttribute("cardlist", list);
    		}
    		
    		/* 사용자가 주문한 상품이 장바구니에 이미 담긴 물품인지 검색해서 있다면 수량을 증가 */
    		int cnt = 0;
    		Product goodsQnt = new Product();
    		for(int i=0; i<list.size(); i++) {
    			goodsQnt = list.get(i);
    			if(goodsQnt.getProductId().equals(id)) {
    				cnt++;
    				int orderQuantity = goodsQnt.getQuantity() + 1;
    				goodsQnt.setQuantity(orderQuantity);
    			}
    		}
    		
    		/* 사용자가 주문한 상품이 장바구니에 없다면 수량을 1로 바꿔주고
    			장바구니 역할을 하고있는 ArrayList에 추가함.*/
    		if(cnt == 0){
    			goods.setQuantity(1);
    			list.add(goods);
    		}
    		response.sendRedirect("product.jsp?id=" + id);
    	%>
    </body>
    </html>

     

    cart.jsp

    <%@page import="java.text.DecimalFormat"%>
    <%@page import="kr.gov.dto.Product"%>
    <%@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">
    	
    	<%
    		//세션 ID값 가져오기
    		String cartId = session.getId();
    		DecimalFormat dFormat = new DecimalFormat("###,###");		//숫자를 천단위 구분 
    	%>
    	
    </head>
    <body>
    	<jsp:include page="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>
    				</tr>
    			</table>
    		</div>
    		
    		<div style="padding-top: 50px;">
    			<!-- table-hover : 마우스 포인터가 있는 행의 배경을 바꾸어 눈에 띄도록 만들어진 클래스 -->
    			<table class="table table-hover">
    				<tr>
    					<th>상품</th>
    					<th>가격</th>
    					<th>수량</th>
    					<th>소계</th>
    					<th>비고</th>
    				</tr>
    				
    				<%
    					int sum = 0;
    					
    					//세션 속성의 이름이 cardList인 세션 정보(장바구니에 담긴 물품 목록)를 가져와서 ArrayList에 대입
    					ArrayList<Product> cartList = (ArrayList<Product>)session.getAttribute("cardList");
    					
    					/* cart.jsp 파일에서 전체상품을 삭제하는 deleteCard.jsp에서 session.invalidate()를 호툴하게 되면
    					   cartList는 null이 되기 때문에 아래와 같은 코드가 반드시 필요함. */
    					if(cartList == null) {
    						cartList = new ArrayList<>();
    					}
    					
    					//상품 리스트 하나씩 출력하기
    					for(int i = 0; i < cartList.size(); i++) {
    						Product product = cartList.get(i);
    						int total = product.getUnitprice() * product.getQuantity();
    						sum += total;
    						
    				%>
    				<tr>
    					<td><%= product.getProductId() %>-<%= product.getPname() %></td>
    					<td><%= dFormat.format(product.getUnitprice()) %></td>
    					<td><%= product.getQuantity() %></td>
    					<td><%= dFormat.format(total) %></td>
    					<td><a href="./removeCard.jsp?id=<%= product.getProductId() %>" class="badge badge-danger">삭제</a></td>
    				</tr>
    				<%
    					}
    				%>
    				<tr>
    					<th></th>
    					<th></th>
    					<th>총액</th>
    					<th><%= dFormat.format(sum) %></th>
    					<th></th>
    				</tr>
    			</table>
    			<a href="./products.jsp" class="btn btn-secondary">쇼핑 계속하기 &raquo;</a>
    		</div>
    		
    		<hr/>
    	</div>
    	
    	<jsp:include page="footer.jsp"/>
    </body>
    </html>

     

    DecimalFormat 숫자를 천단위 구분하는 클래스 

    DecimalFormat dfFormat = new DecimalFormat("###,###"); 
    dfFormat.format(숫자변수);

     

    CRED - 삭제

    removeCard.jsp

    <%@page import="java.util.ArrayList"%>
    <%@page import="kr.gov.dto.Product"%>
    <%@page import="kr.gov.dao.ProductRepository"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>해당상품 삭제</title>
    </head>
    <body>
    	<%
    		String id = request.getParameter("id"); //삭제할 상품 id
    		
    		//상품 id 넘어오지 않았을 때 강제로 products.jsp이동시키고 종료
    		if(id == null || id.trim().equals("")) {
    			response.sendRedirect("products.jsp");
    			return;
    		}
    		
    		//상품 데이터 접근 클레스의 인스턴스 생성
    		ProductRepository dao = ProductRepository.getInstance();
    		//해당 id값을 이용해서 상품상세정보를 얻어오는 코드
    		Product product = dao.getProductById(id);
    		if(product == null) {
    			response.sendRedirect("exceptionNoProductId.jsp");
    		}
    		
    		ArrayList<Product> cardList = (ArrayList<Product>)session.getAttribute("cardList");
    		Product goodQnt = new Product();
    		for(int i=0; i<cardList.size(); i++) {
    			goodQnt = cardList.get(i);
    			if(goodQnt.getProductId().equals(id)) {
    				cardList.remove(goodQnt);
    			}
    		}
    		
    		response.sendRedirect("cart.jsp");
    	%>
    </body>
    </html>

    삭제 전
    삭제 후

     

    장바구니 비우기 - 전체 삭제하기 (세션삭제)

    deleteCart.jsp

    \<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>장바구니 비우기</title>
    </head>
    <body>
    	<%
    		//모든 상품을 삭제하기 위해서 sessionID값을 얻음
    		String id = request.getParameter("cartId");
    		if(id == null || id.trim().equals("")) { //trim() : 공백
    			response.sendRedirect("cart.jsp");
    			return;
    		}
    		
    		session.invalidate(); //세션 삭제(비활성화)
    		response.sendRedirect("cart.jsp");
    	%>
    </body>
    </html>

     

    삭제 전
    삭제 후

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading