본문 바로가기
ICIA 수업일지

2021.09.07 수업일지(Servlet, Mysql, jstl)

by 주성씨 2021. 9. 7.

- 핸들바 펑션을 이용해 판매중, 판매중지 여부를 about.jsp에 보여주도록 하겠다.

- about.jsp

<div id="products"></div>
<script id="temp" type="text/x-handlebars-template">
{{#each array}}
<div class="item">
	<div class="imgbox">
	<img src="/image/product/{{image}}" width=210/>
	</div>
	<div class="prod_id">{{prod_id}}</div>
	<div class="prod_name">{{prod_name}}</div>
	<div class="price">{{price}}</div>
	<div class="cart{{prod_del}}">{{printDel prod_del}}</div>
</div>
{{/each}}
</script>
<script>
	Handlebars.registerHelper("printDel", function(prod_del) {
		if (prod_del == 0) {
			return "장바구니 담기"
		} else{
			return "판매중지"
		}
	})
</script>

 

- prod_del 파라미터를 productDAO에서 가지고 올 수 있도록 하겠다.

- productDAO -> 1. 상품목록 출력 메서드

			while (rs.next()) {
				JSONObject obj = new JSONObject();
				obj.put("image", rs.getString("image"));
				obj.put("prod_id", rs.getString("prod_id"));
				obj.put("prod_name", rs.getString("prod_name"));
				obj.put("mall_name", rs.getString("mall_name"));
				obj.put("company", rs.getString("company"));
				DecimalFormat df = new DecimalFormat("#,###");
				String price = df.format(rs.getInt("price1"));
				obj.put("price", price);
				obj.put("price2", df.format(rs.getInt("price2")));
				obj.put("prod_del", rs.getString("prod_del")); // new
				array.add(obj);
			}

 

- 장바구니 담기, 판매중지 폰트에 CSS를 주고 장바구니 담기 버튼을 누르면 확인 얼럿이 뜨도록 하겠다.

.cart0{
	color:blue;
	font-weight: bold;
	cursor: pointer;
}
.cart1{
	color:red;
	font-weight: bold;
}
<script>
	var page = 1;

	// 장바구니 담기 확인
	$('#products').on('click','.item .cart0',function(){
		if(!confirm("장바구니에 담으시겠습니까?")) return;
	})

 

출력물

 

- 장바구니 목록 페이지를 만들도록 하겟다.

- main.jsp

				<h4>
					<a href="/purchase/list">주문목록</a>
				</h4>
				<h4>
					<a href="/cart/list">장바구니</a>
				</h4>
			</div>

 

- create new controller\CartServlet.java

package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(value = { "/cart/list", "/cart/insert", "/cart/delete" })
public class CartServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		switch (request.getServletPath()) {
		case "/cart/list":
			request.setAttribute("pageName", "/cart/list.jsp");
			break;
		}
		RequestDispatcher dis = request.getRequestDispatcher("/main.jsp");
		dis.forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	}

}

 

- create new folder in webContent\cart

- create new cart\list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>장바구니</h1>

 

- 장바구니 담기 버튼을 눌렀을때 prod_id를 가지고 올 수 있도록 한다.

	// 장바구니 담기 확인
	$('#products').on('click','.item .cart0',function(){
		var prod_id=$(this).parent().find(".prod_id").html();
		if(!confirm(prod_id+"을(를) 장바구니에 담으시겠습니까?")) return;
	})

 

- create new model\CartVO.java

package model;

public class CartVO {
	private String prod_id;
	private String prod_name;
	private int quantity;
	private int price;

 

- CartServlet.java

- 카트에 담기전에 어떤 상품인지 정보를 가지고 오는 작업을 하도록 하겠다.

	ProductDAO pdao = new ProductDAO();
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		switch (request.getServletPath()) {
		case "/cart/insert":
			String prod_id = request.getParameter("prod_id");
			ProductVO vo = pdao.read(prod_id);
			System.out.println(vo.toString());
			break;
		}
	}

 

- about.jsp

	// 장바구니 담기 확인
	$('#products').on('click','.item .cart0',function(){
		var prod_id=$(this).parent().find(".prod_id").html();
		
		if(!confirm(prod_id+"을(를) 장바구니에 담으시겠습니까?")) return;
		
		$.ajax({
			type:'post',
			url:'/cart/insert',
			data:{'prod_id':prod_id},
			success:function(){
				alert("장바구니에 담았습니다.");
			}
		})
	})

 

확인

 

- CartVO에 값을 담아서 출력해보도록 하겠다.

- CartServlet.java

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		switch (request.getServletPath()) {
		case "/cart/insert":
			String prod_id = request.getParameter("prod_id");
			ProductVO vo = pdao.read(prod_id);
			
			CartVO cartVo = new CartVO();
			cartVo.setProd_id(vo.getProd_id());
			cartVo.setProd_name(vo.getProd_name());
			cartVo.setPrice(vo.getPrice1());
			System.out.println(cartVo.toString());
			
			break;
		}
	}

 

확인

 

- 장바구니에 insert한 상품을 세션에 담아보도록 하겠다.

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 장바구니 상품을 세션에 담아보자.
		HttpSession session = request.getSession();
									// 강제 형변환
		ArrayList<CartVO> cartList = (ArrayList<CartVO>) session.getAttribute("cartList");

		switch (request.getServletPath()) {
		case "/cart/insert":
			String prod_id = request.getParameter("prod_id");
			ProductVO vo = pdao.read(prod_id);

			// 원하는 값을 cartVo에 가지고 옴
			CartVO cartVo = new CartVO();
			cartVo.setProd_id(vo.getProd_id());
			cartVo.setProd_name(vo.getProd_name());
			cartVo.setPrice(vo.getPrice1());
			cartVo.setQuantity(1);
			if (cartList == null) {
				cartList = new ArrayList<CartVO>();
			}
			cartList.add(cartVo);
			session.setAttribute("cartList", cartList);
			break;
		}
	}

 

- cart\list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<style>
table {
	border-collapse: collapse;
	margin: 0px auto;
	margin-bottom: 10px;
}

th {
	background: rgb(242, 242, 242);
	color: black;
}

th, td {
	border: 1px solid black;
	padding: 10px;
}
</style>
<h1>장바구니</h1>
<table>
	<tr>
		<th width=50><input type="checkbox" /></th>
		<th width=100>상품코드</th>
		<th width=300>상품명</th>
		<th width=100>단가</th>
		<th width=100>수량</th>
		<th width=100>합계</th>
		<th width=50>삭제</th>
	</tr>
	<c:forEach items="${cartList }" var="vo">
		<tr class="row">
			<td style="text-align: center;"><input type="checkbox" /></td>
			<td>${vo.prod_id}</td>
			<td>${vo.prod_name}</td>
			<td>${vo.price}</td>
			<td>${vo.quantity}</td>
			<td>${vo.price*vo.quantity}</td>
			<td style="text-align: center;"><button>삭제</button></td>
		</tr>
	</c:forEach>
</table>

 

확인

 

- 같은 상품이 담겨있을때 수량이 +1이 되도록 하겠다.

- CartServlet.java

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 장바구니 상품을 세션에 담아보자.
		HttpSession session = request.getSession();
		// 강제 형변환
		ArrayList<CartVO> cartList = (ArrayList<CartVO>) session.getAttribute("cartList");

		switch (request.getServletPath()) {
		case "/cart/insert":
			String prod_id = request.getParameter("prod_id");
			ProductVO vo = pdao.read(prod_id);

			// 원하는 값을 cartVo에 가지고 옴
			CartVO cartVo = new CartVO();
			cartVo.setProd_id(vo.getProd_id());
			cartVo.setProd_name(vo.getProd_name());
			cartVo.setPrice(vo.getPrice1());
			cartVo.setQuantity(1);

			// new
			boolean isFind = false;
			if (cartList == null) {
				cartList = new ArrayList<CartVO>();
			} else {
				for (CartVO v : cartList) {
					// 카트에 동일한 상품이 있는 경우
					if (cartVo.getProd_id().equals(v.getProd_id())) {
						v.setQuantity(v.getQuantity() + 1);
						isFind = true;
						break;
					}
				}
			}
			// 카트에 동일한 상품이 없는 경우
			if (!isFind) {
				cartList.add(cartVo);
			}
			session.setAttribute("cartList", cartList);
			break;
		}
	}

 

확인

 

- 장바구니에 들어있는 상품의 총 가격을 출력해보도록 하겠다.

- CartServlet.java

			// 카트에 있는 상품의 총가격
			int total = 0;
			for (CartVO v : cartList) {
				total = total + (v.getQuantity() * v.getPrice());
				session.setAttribute("total", total);
			}
			break;
		}
	}

 

- cart\list.jsp

- price, total, price*quantity 의 단위에 태그 라이브러리를 이용해서 포맷을 주도록 하겠다.

<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%>
<h1>장바구니</h1>
<table id="tbl">
	<tr class="title">
		<th width=50><input type="checkbox" id="chkAll"/></th>
		<th width=100>상품코드</th>
		<th width=300>상품명</th>
		<th width=100>단가</th>
		<th width=100>수량</th>
		<th width=100>합계</th>
		<th width=50>삭제</th>
	</tr>
	<c:forEach items="${cartList }" var="vo">
		<tr class="row">
			<td style="text-align: center;"><input type="checkbox" class="chk"/></td>
			<td>${vo.prod_id}</td>
			<td>${vo.prod_name}</td>
			<td><f:formatNumber pattern="#,###원" value="${vo.price}"></f:formatNumber></td>
			<td>
			<input id="quantity" value="${vo.quantity}" size=2/>
			<button class="update">수정</button>
			</td>
			<td><f:formatNumber pattern="#,###원"
					value="${vo.price*vo.quantity}"></f:formatNumber></td>
			<td style="text-align: center;"><button class="delete">삭제</button></td>
		</tr>
	</c:forEach>
	<tr>
		<td class="title">합계</td>
		<td colspan=6 style="text-align: right;"><f:formatNumber
				pattern="#,###원" value="${total}"></f:formatNumber></td>
	</tr>
</table>

 

확인

 

- 이제 장바구니에 있는 수량 수정, 삭제의 기능을 추가해보도록 하겠다.

1. 수정

- cart\list.jsp

- 장바구니에 있는 상품코드와 수량을 알아야 수정할수 있다.

			<td class="prod_id">${vo.prod_id}</td>
			<input class="quantity" value="${vo.quantity}" size=2/>
<script>
	//수량 수정버튼을 클릭한 경우
	$('#tbl').on('click','.row .update',function(){
		if(!confirm("수량을 수정하시겠습니까?")) return;
		var prod_id = $(this).parent().parent().find(".prod_id").html();
		var quantity = $(this).parent().find(".quantity").val();
		alert(prod_id+"/"+quantity)
	})
</script>

 

확인

 

- 이제 ajax을 통해서 값을 전달하도록 하겠다.

- CartServlet.java

@WebServlet(value = { "/cart/update","/cart/list", "/cart/insert", "/cart/delete" })
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 장바구니 상품을 세션에 담아보자.
		HttpSession session = request.getSession();
		// 강제 형변환
		ArrayList<CartVO> cartList = (ArrayList<CartVO>) session.getAttribute("cartList");
		// 전역화
		String prod_id = request.getParameter("prod_id");

		switch (request.getServletPath()) {
		case "/cart/update":
			int quantity = Integer.parseInt(request.getParameter("quantity"));
			for(CartVO v : cartList){
				if(v.getProd_id().equals(prod_id)){
					v.setQuantity(quantity);
					break;
				}
			}
			session.setAttribute("cartList", cartList);
			break;

 

- cart\list.jsp

<script>
	//수량 수정버튼을 클릭한 경우
	$('#tbl').on('click', '.row .update', function() {
		if (!confirm("수량을 수정하시겠습니까?"))
			return;
		var prod_id = $(this).parent().parent().find(".prod_id").html();
		var quantity = $(this).parent().find(".quantity").val();
		$.ajax({
			type : 'post',
			url : '/cart/update',
			data : {
				'prod_id' : prod_id,
				'quantity' : quantity
			},
			success : function() {
				alert("수량이 수정되었습니다.");
				location.reload();
			}
		})
	})
</script>

수정 확인

 

2. 삭제

- cart\list.jsp

	// 장바구니 상품 삭제 버튼을 클릭한 경우
	$('#tbl').on('click','.row .delete',function(){
		var prod_id = $(this).parent().parent().find(".prod_id").html();
		if(!confirm(prod_id+" 상품을 장바구니에서 삭제하시겠습니까?")) return;
	})

 

확인

 

- CartServlet.java

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 장바구니 상품을 세션에 담아보자.
		HttpSession session = request.getSession();
		// 강제 형변환
		ArrayList<CartVO> cartList = (ArrayList<CartVO>) session.getAttribute("cartList");
		// 전역화
		String prod_id = request.getParameter("prod_id");

		switch (request.getServletPath()) {
		case "/cart/delete":
			for(int i=0; i<cartList.size();i++){
				CartVO vo = cartList.get(i);
				if(vo.getProd_id().equals(prod_id)){
					cartList.remove(i);
					break;
				}
			}
			break;

 

- cart\list.jsp

	// 장바구니 상품 삭제 버튼을 클릭한 경우
	$('#tbl').on('click','.row .delete',function(){
		var prod_id = $(this).parent().parent().find(".prod_id").html();
		if(!confirm(prod_id+" 상품을 장바구니에서 삭제하시겠습니까?")) return;
		$.ajax({
			type : 'post',
			url : '/cart/delete',
			data : {
				'prod_id' : prod_id
			},
			success : function() {
				alert("상품이 삭제되었습니다.");
				location.reload();
			}
		})
	})
</script>

 

확인

 

- 합계가 수정되도록 하겠다.

- CartServlet.java

		// 카트에 있는 상품의 총가격
		int total = 0;
		for (CartVO v : cartList) {
			total = total + (v.getQuantity() * v.getPrice());
		}
		session.setAttribute("total", total);

ㄴ total을 switch문 밖으로 빼면 된다.

 

확인

 

- 장바구니에 상품이 있는경우 없는 경우

- cart\list.jsp

- #tbl을 다음으로 묶는다.

<c:if test="${cartList.size()>0}"> <!-- 장바구니에 상품이 있는경우 -->
<!-- #tbl -->
</c:if>

 

- 장바구니에 상품이 없을경우를 아래에 삽입한다.

<c:if test="${cartList.size()==0}">
	<div><h3>장바구니가 비어있습니다.</h3></div>
</c:if>

 

확인

 

- 장바구니에서 선택한 상품 과 전체선택한 상품을 주문하는 페이지에 넣는 작업을 하도록 하겠다.

- cart\list.jsp

- 전체상품주문, 선택상품주문 버튼을 만들겠다.

		</table>
		<div style="text-align: center;">
			<button id="all">전체상품주문</button>
			<button id="select">선택상품주문</button>
		</div>
	</c:if>

 

<script>
	// chkAll 버튼을 클릭한 경우
	$('#tbl').on('click', ".title #chkAll", function() {
		if ($(this).is(':checked')) {
			$('#tbl tr input:checkbox').each(function() {
				$(this).prop('checked', true);
			});
		} else {
			$('#tbl tr input:checkbox').each(function() {
				$(this).prop('checked', false);
			});
		}
	});
	
    // 각행의 checkbox를 선택한 경우
    $('#tbl').on('click','.row td .chk', function(){
        var cntAll = $('#tbl .row td .chk').length; //첵박 개수
        var cntChecked = $('#tbl .row td .chk:checked').length; //첵박체크 개수
        if(cntAll==cntChecked){
            $('#chkAll').prop('checked',true);
        }else{
            $('#chkAll').prop('checked',false);
        };
    });

 

확인

 

- 전체상품주문을 클릭할 경우 주문정보가 보이도록 하겠다.

- cart\list.jsp

- 우선 장바구니 정보를 div#cartinfo에 넣는다.

<div id="cartinfo">
	<h1>장바구니</h1>
    ....
    	<c:if test="${cartList.size()==0}">
		<div>
			<h3>장바구니가 비어있습니다.</h3>
		</div>
	</c:if>
</div>

 

- 같은 페이지에 주문정보란을 새로 만든다.

<div id="orderinfo">
	<h1>주문정보</h1>
	<table id="tblorder"></table>
	<script id="temp" type="text/x-handlebars-template">
		<tr class="class">
			<td width=100>상품코드</td>
			<td width=300>상품이름</td>
			<td width=100>상품가격</td>
			<td width=100>상품수량</td>
			<td width=100>상품금액</td>
		</tr>
	{{#each .}}
		<tr class="row">
			<td>{{prod_id}}</td>
			<td>{{prod_name}}</td>
			<td>{{price}}</td>
			<td>{{quantity}}</td>
			<td>{{sum}}</td>
		</tr>
	{{/each}}
	</script>
</div>

 

- 상품의 데이터를 배열에 담아서 주문정보에 데이터를 template으로 보내도록 하겠다.

- 가져올 데이터들의 class명을 지정한다.

			<c:forEach items="${cartList }" var="vo">
				<tr class="row">
					<td style="text-align: center;"><input type="checkbox"
						class="chk" /></td>
					<td class="prod_id">${vo.prod_id}</td>
					<td class="prod_name">${vo.prod_name}</td>
					<td class="price"><f:formatNumber pattern="#,###원" value="${vo.price}"></f:formatNumber></td>
					<td><input class="quantity" value="${vo.quantity}" size=2 />
						<button class="update">수정</button></td>
					<td class="sum"><f:formatNumber pattern="#,###원"
							value="${vo.price*vo.quantity}"></f:formatNumber></td>
					<td style="text-align: center;"><button class="delete">삭제</button></td>
				</tr>
			</c:forEach>

 

- 전체상품주문을 클릭할 경우

	// 전체상품주문 클릭할 경우
	$('#all').on('click', function() {
		$('#orderinfo').show();

		var array = [];
		$('#tbl .row').each(function() {
			var prod_id = $(this).find('.prod_id').html();
			var prod_name = $(this).find('.prod_name').html();
			var price = $(this).find('.price').html();
			var quantity = $(this).find('.quantity').val();
			var sum = $(this).find('.sum').html();
			var data = {
				"prod_id" : prod_id,
				"prod_name" : prod_name,
				"price" : price,
				"quantity" : quantity,
				"sum" : sum
			}
			array.push(data);
		});
		var temp = Handlebars.compile($("#temporder").html());
		$("#tblorder").html(temp(array));
	})

 

- 선택상품주문을 클릭할 경우

	// 선택상품주문 클릭할 경우
	$('#select').on('click', function() {
		if ($('#tbl .row .chk:checked').length == 0) {
			alert("주문할 상품을 선택하세요.");
			return;
		}
		$('#orderinfo').show();
		var array = [];
		$('#tbl .row .chk:checked').each(function() {
			var row = $(this).parent().parent();
			var prod_id = row.find('.prod_id').html();
			var prod_name = row.find('.prod_name').html();
			var price = row.find('.price').html();
			var quantity = row.find('.quantity').val();
			var sum = row.find('.sum').html();
			var data = {
				"prod_id" : prod_id,
				"prod_name" : prod_name,
				"price" : price,
				"quantity" : quantity,
				"sum" : sum
			}
			array.push(data);
		});
		var temp = Handlebars.compile($("#temporder").html());
		$("#tblorder").html(temp(array));
	})

 

- array에 담겨있는 정보를 template를 이용해 넘긴다.

<div id="orderinfo">
	<h1>주문정보</h1>
	<table id="tblorder"></table>
	<script id="temporder" type="text/x-handlebars-template">
		<tr class="title">
			<td width=150>상품코드</td>
			<td width=300>상품이름</td>
			<td width=150>상품가격</td>
			<td width=150>상품수량</td>
			<td width=150>상품금액</td>
		</tr>
		{{#each .}}
		<tr class="row">
			<td>{{prod_id}}</td>
			<td>{{prod_name}}</td>
			<td>{{price}}</td>
			<td>{{quantity}}</td>
			<td>{{sum}}</td>
		</tr>
		{{/each}}
	</script>
</div>

 

확인

 

- 주문정보 하단에 주문자 정보 테이블을 만든다.

<div id="orderinfo">
	<h1>주문정보</h1>
	<!-- ... -->
	
	<!-- 주문자 정보 -->
	<table id="tblinfo">
		<tr>
			<td class="title" width=100>주문자 성명</td>
			<td width=850><input id="name" size=10 /></td>
		</tr>
		<tr>
			<td class="title" width=100>배송지 주소</td>
			<td><input id="address" size=50 /></td>
		</tr>
		<tr>
			<td class="title" width=100>이메일 주소</td>
			<td><input id="email" size=10 /></td>
		</tr>
		<tr>
			<td class="title" width=100>전화번호</td>
			<td><input id="tel" size=10 /></td>
		</tr>
		<tr>
			<td class="title" width=100>결제방법</td>
			<td><input type="radio" name="payType" value="0" />무통장 <input
				type="radio" name="payType" value="1" checked />카드</td>
		</tr>
	</table>
	<div style="margin-top: 20px; text-align: center;">
		<input type="submit" value="주문하기" />
	</div>
</div>

 

확인

 

- 신규 주문번호를 생성하는 메서드를 만들겠다.

- model\PurchaseDAO.java

	// 5. 주문번호 생성 메서드
	public String getID() {
		String prod_id = "";
		try {
			String sql = "select max(order_id) from purchase";
			PreparedStatement ps = Database.CON.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			if(rs.next()){
				String maxID=rs.getString("max(order_id)");
				maxID = maxID.substring(1);
				prod_id="R"+(Integer.parseInt(maxID)+1);
			}
		} catch (Exception e) {
			System.out.println("PurchaseDAO getID : "+e.toString());
		}
		return prod_id;
	}

 

- controller\PurchaseRESTServlet.java

@WebServlet(value = { "/getID", "/update_status", "/purchase_read.json", "/purchase.json", "/purchase_product.json" })
public class PurchaseRESTServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	ProductDAO dao = new ProductDAO();
	PurchaseDAO pdao = new PurchaseDAO();

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		switch (request.getServletPath()) { // new
		case "/getID":
			out.println(pdao.getID());
			break;

 

확인

 

- CartServlet에서 /car/list path를 통해서 위의 값을 보내도록 하겠다.

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		switch (request.getServletPath()) {
		case "/cart/list":
			PurchaseDAO purdao = new PurchaseDAO();
			request.setAttribute("order_id", purdao.getID()); // new
			request.setAttribute("pageName", "/cart/list.jsp");
			break;
		}
		RequestDispatcher dis = request.getRequestDispatcher("/main.jsp");
		dis.forward(request, response);
	}

 

- cart\list.jsp

	<!-- 주문자 정보 -->
	<table id="tblinfo">
		<tr>
			<td class="title" width=100>주문자 성명</td>
			<td width=850><input id="name" size=100 value="${order_id}"/></td>
		</tr>
<script>
	$('#orderinfo').hide();

	// 주문하기 버튼을 클릭할 경우
	$(frm).on('submit', function(e) {
		e.preventDefault();
		if (!confirm("상품을 주문하시겠습니까?"))
			return;
	})

 

확인

 

- DAO에 데이터를 넘길 PurchaseVO를 만든다.

- create new model\PurchseVO.java

package model;

public class PurchaseVO {
	private String order_id;
	private String name;
	private String address;
	private String email;
	private String tel;
	private String pdate;
	private String payType;
	private String status;

 

- 주문정보를 DB purchase table에 입력하는 메서드를 만들겠다.

- PurchaseDAO.java

	// 6. 주문정보 DB purchase 입력 메서드
	public void insert(PurchaseVO vo) {
		try {
			String sql = "insert into purchase(order_id,name,address,email,tel,pdate,status,payType) values(?,?,?,?,?,now(),?,?)";
			PreparedStatement ps = Database.CON.prepareStatement(sql);
			ps.setString(1, vo.getOrder_id());
			ps.setString(2, vo.getName());
			ps.setString(3, vo.getAddress());
			ps.setString(4, vo.getEmail());
			ps.setString(5, vo.getTel());
			ps.setString(6, vo.getStatus());
			ps.setString(7, vo.getPayType());
			ps.execute();
		} catch (Exception e) {
			System.out.println("PurchaseDAO insert : " + e.toString());
		}
	}

 

- DAO에 데이터를 넘길 OrderVO를 만든다.

- create new model\OrderVO.java

package model;

public class OrderVO {
	private String order_id;
	private String prod_id;
	private int price;
	private int quantity;

 

- 주문상품 DB order 입력 메서드를 생성한다.

- PurchaseDAO.java

	// 7. 주문상품 DB order 입력 메서드
	public void insertOrders(OrderVO vo) {
		try {
			String sql = "insert into orders(order_id,prod_id,price,quantity) values(?,?,?,?)";
			PreparedStatement ps = Database.CON.prepareStatement(sql);
			ps.setString(1, vo.getOrder_id());
			ps.setString(2, vo.getProd_id());
			ps.setInt(3, vo.getPrice());
			ps.setInt(4, vo.getQuantity());
			ps.execute();
		} catch (Exception e) {
			System.out.println("PurchaseDAO insertOrders : " + e.toString());
		}
	}

 

- PurchaseRESTServlet에서 

@WebServlet(value = { "/purchase/orders", "/purchase/insert", "/getID", "/update_status", "/purchase_read.json",
		"/purchase.json", "/purchase_product.json" })

 

- 우선 값들이 제대로 가지고 오는지 확인해주기 위해서 콘솔에 출력해본다.

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		PurchaseVO vo = new PurchaseVO();
		switch (request.getServletPath()) {
		case "/purchase/insert":
			vo.setOrder_id(request.getParameter("order_id"));
			vo.setName(request.getParameter("name"));
			vo.setAddress(request.getParameter("address"));
			vo.setEmail(request.getParameter("email"));
			vo.setTel(request.getParameter("tel"));
			vo.setPayType(request.getParameter("payType"));
			vo.setStatus(request.getParameter("status"));
			System.out.println(vo.toString());
//			pdao.insert(vo);
			break;
		case "/purchase/orders":
			OrderVO ovo = new OrderVO();
			ovo.setOrder_id(request.getParameter("order_id"));
			ovo.setProd_id(request.getParameter("prod_id"));
			ovo.setPrice(Integer.parseInt(request.getParameter("order_id")));
			ovo.setQuantity(Integer.parseInt(request.getParameter("quantity")));
			System.out.println(ovo.toString());
//			pdao.insertOrders(ovo);
			break;
		}
	}

 

- cart\list.jsp

- 아래부분 수정

<!-- 주문자 정보 -->
	<form name="frm">
		<table id="tblinfo">
			<tr>  <!-- 확인 -->
				<td class="title" width=100>주문번호</td>
				<td width=850><input name="order_id" size=100
					value="${order_id}" /></td>
			</tr>
			<tr>
				<td class="title" width=100>주문자 성명</td>
				<td><input name="name" size=100 /></td> <!-- 확인 -->
			</tr>
			<tr>
				<td class="title" width=100>배송지 주소</td>
				<td><input name="address" size=100 /></td>  <!-- 확인 -->
			</tr>
			<tr>
				<td class="title" width=100>이메일 주소</td>
				<td><input name="email" size=100 /></td>  <!-- 확인 -->
			</tr>
			<tr>
				<td class="title" width=100>전화번호</td>
				<td><input name="tel" size=100 /></td>  <!-- 확인 -->
			</tr>
			<tr>  <!-- 확인 -->
				<td class="title" width=100>결제방법</td>
				<td><input type="radio" name="payType" value="0" />무통장 <input
					type="radio" name="payType" value="1" />카드</td>
			</tr>
		</table>
		<div style="margin-top: 20px; text-align: center;">
			<input type="submit" value="주문하기" />
		</div>
	</form>

 

	// 주문하기 버튼을 클릭할 경우
	$(frm).on('submit', function(e) {
		e.preventDefault();
		if (!confirm("상품을 주문하시겠습니까?"))
			return;
		var order_id = $(frm.order_id).val();
		var name = $(frm.name).val();
		var address = $(frm.address).val();
		var tel = $(frm.tel).val();
		var payType = $("input[name='payType']:checked").val();
		var email = $(frm.email).val();

		$.ajax({
			type : 'post',
			url : '/purchase/insert',
			data : {
				"order_id" : order_id,
				"name" : name,
				"address" : address,
				"tel" : tel,
				"payType" : payType,
				"email" : email
			},
			success : function() {
				alert("주문되었습니다.");
			}
		})
	})

 

확인

 

- #tblorder의 값을 가지고 오기 위해 각 td에 class name을 지정해준다.

<div id="orderinfo">
	<h1>주문정보</h1>
	<table id="tblorder"></table>
	<script id="temporder" type="text/x-handlebars-template">
		<tr class="title">
			<td width=150>상품코드</td>
			<td width=300>상품이름</td>
			<td width=150>상품가격</td>
			<td width=150>상품수량</td>
			<td width=150>상품금액</td>
		</tr>
		{{#each .}}
		<tr class="row">
			<td class="prod_id">{{prod_id}}</td>
			<td class="prod_name">{{prod_name}}</td>
			<td class="price">{{price}}</td>
			<td class="quantity">{{quantity}}</td>
			<td class="sum">{{sum}}</td>
		</tr>
		{{/each}}
	</script>

 

	// 주문하기 버튼을 클릭할 경우
	$(frm).on('submit', function(e) {
		e.preventDefault();
		if (!confirm("상품을 주문하시겠습니까?"))
			return;
		var order_id = $(frm.order_id).val();
		var name = $(frm.name).val();
		var address = $(frm.address).val();
		var tel = $(frm.tel).val();
		var payType = $("input[name='payType']:checked").val();
		var email = $(frm.email).val();

		$.ajax({
			type : 'post',
			url : '/purchase/insert',
			data : {
				"order_id" : order_id,
				"name" : name,
				"address" : address,
				"tel" : tel,
				"payType" : payType,
				"email" : email
			},
			success : function() { // 이하 new
				$('#tblorder .row').each(function() {
					var prod_id = $(this).find(".prod_id").html();
					var price = $(this).find(".price").html();
					var price = price.replaceAll(",", "");
					var quantity = $(this).find(".quantity").html();
					$.ajax({
						type : 'post',
						url : '/purchase/orders',
						data : {
							"order_id" : order_id,
							"prod_id" : prod_id,
							"price" : price,
							"quantity" : quantity
						},
						success : function() {
						}
					})
				})
                // 해당 위치로 이동해줘야 여러번 되묻지 않는다.
				alert("주문되었습니다.")
				if (confirm("주문목록으로 이동하시겠습니까?")) {
					location.href = "/purchase/list";
				} else {
					return;
				}
			}
		})
	})

 

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		PurchaseVO vo = new PurchaseVO();
		switch (request.getServletPath()) {
		case "/purchase/insert":
			vo.setOrder_id(request.getParameter("order_id"));
			vo.setName(request.getParameter("name"));
			vo.setAddress(request.getParameter("address"));
			vo.setEmail(request.getParameter("email"));
			vo.setTel(request.getParameter("tel"));
			vo.setPayType(request.getParameter("payType"));
			vo.setStatus(request.getParameter("status"));
			pdao.insert(vo); // new
			break;

		case "/purchase/orders":
			OrderVO ovo = new OrderVO();
			ovo.setOrder_id(request.getParameter("order_id"));
			ovo.setProd_id(request.getParameter("prod_id"));
			ovo.setPrice(Integer.parseInt(request.getParameter("price")));
			ovo.setQuantity(Integer.parseInt(request.getParameter("quantity")));
			pdao.insertOrders(ovo); // new
			break;
		}
	}

 

확인

 

shop_ver0907.zip
1.13MB