Study Web Development

2월 16일

이전으로

Servlet & JSP

9. MVC

mvcPage

프로젝트 생성 및 설정
  1. css 폴더의 layout.css 하단에 다음의 내용을 추가
/* 카트 */
form[id="cart_order"] {
	border: none;
}

/* 주문 */
form[id="order_modify"],form[id="order_form"] {
	width: 860px;
}
  1. WEB-INF 폴더의 shop.properties 하단에 다음의 내용을 추가
/cart/modifyCart.do=kr.cart.action.ModifyCartAction
/cart/deleteCart.do=kr.cart.action.DeleteCartAction
  1. table.sql 하단에 다음의 내용을 추가
/* 주문 */
CREATE TABLE zorder(
	order_num NUMBER NOT NULL,
	item_name VARCHAR2(600) NOT NULL,
	order_total NUMBER(9) NOT NULL,
	payment NUMBER(1) NOT NULL,
	status NUMBER(1) DEFAULT 1 NOT NULL,
	receive_name VARCHAR2(30) NOT NULL,
	receive_post VARCHAR2(5) NOT NULL,
	receive_address1 VARCHAR2(90) NOT NULL,
	receive_address2 VARCHAR2(90) NOT NULL,
	receive_phone VARCHAR2(15) NOT NULL,
	notice VARCHAR2(4000),
	reg_date DATE DEFAULT SYSDATE NOT NULL,
	modify_date DATE,
	mem_num NUMBER NOT NULL,
	CONSTRAINT zorder_pk PRIMARY KEY (order_num),
	CONSTRAINT zorder_fk1 FOREIGN KEY (mem_num) REFERENCES zmember (mem_num)
);

CREATE SEQUENCE zorder_seq;

CREATE TABLE zorder_detail(
	detail_num NUMBER NOT NULL,
	item_num NUMBER NOT NULL,
	item_name VARCHAR2(30) NOT NULL,
	item_price NUMBER(8) NOT NULL,
	item_total NUMBER(8) NOT NULL,
	order_quantity NUMBER(7) NOT NULL,
	order_num NUMBER NOT NULL,
	CONSTRAINT zdetail_pk PRIMARY KEY (detail_num),
	CONSTRAINT zdetail_fk1 FOREIGN KEY (order_num) REFERENCES zorder (order_num)
);

CREATE SEQUENCE zdetail_seq;
Model
  1. 새 클래스 ModifyCartAction 생성
package kr.cart.action;

import java.util.HashMap;
import java.util.Map;

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

import org.codehaus.jackson.map.ObjectMapper;

import kr.cart.dao.CartDAO;
import kr.cart.vo.CartVO;
import kr.controller.Action;
import kr.item.dao.ItemDAO;
import kr.item.vo.ItemVO;

public class ModifyCartAction implements Action {

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		Map<String, String> mapAjax = new HashMap<String, String>();
		
		HttpSession session = request.getSession();
		Integer user_num = (Integer)session.getAttribute("user_num");
		
		if(user_num==null) { // 로그인되어 있지 않은 경우
			mapAjax.put("result", "logout");
		}
		else { // 로그인되어 있는 경우
			// 전송된 데이터 인코딩 처리
			request.setCharacterEncoding("UTF-8");
			
			// 전송된 데이터 반환
			int item_num = Integer.parseInt(request.getParameter("item_num"));
			int item_quantity = Integer.parseInt(request.getParameter("order_quantity"));
			
			// 현재 구매하고자 하는 상품의 재고 수를 구함
			ItemDAO itemDao = ItemDAO.getInstance();
			ItemVO item = itemDao.getItem(item_num);
			if(item.getStatus()==1) { // 상품 미표시의 경우
				mapAjax.put("result", "noSale");
			}
			else if(item.getQuantity()<item_quantity) { // 재고 부족
				mapAjax.put("result", "noQuantity");
			}
			else { // 상품 수량 변경 가능
				CartVO cart = new CartVO();
				cart.setCart_num(Integer.parseInt(request.getParameter("cart_num")));
				cart.setOrder_quantity(item_quantity);
				
				CartDAO cartDao = CartDAO.getInstance();
				cartDao.updateCart(cart);
				
				mapAjax.put("result", "success");
			}
		}
		
		ObjectMapper mapper = new ObjectMapper();
		String ajaxData = mapper.writeValueAsString(mapAjax);
		
		request.setAttribute("ajaxData", ajaxData);
		
		// JSP 경로 반환
		return "/WEB-INF/views/common/ajax_view.jsp";
	}

}
  1. 새 클래스 DeleteCartAction 생성
package kr.cart.action;

import java.util.HashMap;
import java.util.Map;

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

import org.codehaus.jackson.map.ObjectMapper;

import kr.cart.dao.CartDAO;
import kr.controller.Action;

public class DeleteCartAction implements Action {

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		Map<String, String> mapAjax = new HashMap<String, String>();
		
		HttpSession session = request.getSession();
		Integer user_num = (Integer)session.getAttribute("user_num");
		if(user_num==null) { // 로그인되어 있지 않은 경우
			mapAjax.put("result", "logout");
		}
		else { // 로그인되어 있는 경우
			// 전송된 데이터 인코딩 처리
			request.setCharacterEncoding("UTF-8");
			
			CartDAO dao = CartDAO.getInstance();
			dao.deleteCart(Integer.parseInt(request.getParameter("cart_num")));
			
			mapAjax.put("result", "success");
		}
		
		ObjectMapper mapper = new ObjectMapper();
		String ajaxData = mapper.writeValueAsString(mapAjax);
		
		request.setAttribute("ajaxData", ajaxData);
		
		// JSP 경로 반환
		return "/WEB-INF/views/common/ajax_view.jsp";
	}

}
자바빈
  1. src/main/java 오른쪽 클릭하고 새 패키지 kr.order.vo 생성 후 새 클래스 OrderVO 생성
package kr.order.vo;

import java.sql.Date;

public class OrderVO {
	private int order_num; // 주문 번호
	private String item_name; // 주문 상품명
	private int order_total; // 총 구매 금액
	private int payment; // 지불 방식; 1. 통장 입금, 2. 카드 결제
	private int status; // 배송 상태; 1. 배송 대기, 2. 배송 준비 중, 3. 배송 중, 4. 배송 완료, 5. 배송 취소
	private String receive_name; // 받는 사람 이름
	private String receive_post; // 받는 사람 우편번호
	private String receive_address1; // 받는 사람 주소
	private String receive_address2; // 받는 사람 상세 주소
	private String receive_phone; // 받는 사람 전화번호
	private String notice; // 남길 말
	private Date reg_date; // 주문일
	private Date modify_date; // 배송 상태 수정일
	private int mem_num; // 구매자 회원 번호
	private String id; // 구매자 아이디
	
	public int getOrder_num() {
		return order_num;
	}
	public void setOrder_num(int order_num) {
		this.order_num = order_num;
	}
	public String getItem_name() {
		return item_name;
	}
	public void setItem_name(String item_name) {
		this.item_name = item_name;
	}
	public int getOrder_total() {
		return order_total;
	}
	public void setOrder_total(int order_total) {
		this.order_total = order_total;
	}
	public int getPayment() {
		return payment;
	}
	public void setPayment(int payment) {
		this.payment = payment;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	public String getReceive_name() {
		return receive_name;
	}
	public void setReceive_name(String receive_name) {
		this.receive_name = receive_name;
	}
	public String getReceive_post() {
		return receive_post;
	}
	public void setReceive_post(String receive_post) {
		this.receive_post = receive_post;
	}
	public String getReceive_address1() {
		return receive_address1;
	}
	public void setReceive_address1(String receive_address1) {
		this.receive_address1 = receive_address1;
	}
	public String getReceive_address2() {
		return receive_address2;
	}
	public void setReceive_address2(String receive_address2) {
		this.receive_address2 = receive_address2;
	}
	public String getReceive_phone() {
		return receive_phone;
	}
	public void setReceive_phone(String receive_phone) {
		this.receive_phone = receive_phone;
	}
	public String getNotice() {
		return notice;
	}
	public void setNotice(String notice) {
		this.notice = notice;
	}
	public Date getReg_date() {
		return reg_date;
	}
	public void setReg_date(Date reg_date) {
		this.reg_date = reg_date;
	}
	public Date getModify_date() {
		return modify_date;
	}
	public void setModify_date(Date modify_date) {
		this.modify_date = modify_date;
	}
	public int getMem_num() {
		return mem_num;
	}
	public void setMem_num(int mem_num) {
		this.mem_num = mem_num;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
}

다음으로