ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2022-01-20 jsp 쇼핑몰 만들기 #4
    학원/JSP SERVLET 2022. 1. 20. 15:53

     

    회원정보 수정 이어서

     

    17-3. MemberUpdateAction 

     

    public class MemberUpdateAction implements Action {
    
    	@Override
    	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		MemberVO mvo = new MemberVO();
    		mvo.setName(request.getParameter("name"));
    		mvo.setId(request.getParameter("id"));
    		mvo.setPhone(request.getParameter("phone"));
    		mvo.setEmail(request.getParameter("email"));
    		mvo.setZip_num(request.getParameter("zip_num"));
    		mvo.setPwd(request.getParameter("pwd"));
    		mvo.setAddress( request.getParameter("addr1") + " " + request.getParameter("addr2"));
    		
    		MemberDao mdao = MemberDao.getInstance();
    		mdao.updateMember(mvo);
    		HttpSession session = request.getSession();
    		
    		String url = "shop.do?command=index";
    		RequestDispatcher dp = request.getRequestDispatcher(url);
    		dp.forward(request, response);
    	}
    }

     

     

    17-4. updateMember(mvo) 메소드

     

    public void updateMember(MemberVO mvo) {
    
        String sql = "update member set name=?, pwd=?, phone=?, email=?, zip_num=?, address=? where id=?";
        con = Dbman.getConnection();
        try {
            pstmt = con.prepareStatement(sql);
            pstmt.setString(1, mvo.getName());
            pstmt.setString(2, mvo.getPwd());
            pstmt.setString(3, mvo.getPhone());
            pstmt.setString(4, mvo.getEmail());
            pstmt.setString(5, mvo.getZip_num());
            pstmt.setString(6, mvo.getAddress());
            pstmt.setString(7, mvo.getId());
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally { Dbman.close(con,pstmt,rs); }
    }

     

     


     

    메인 화면 제품 상세보기 

     

    1) 메인화면에 제품을 클릭하면 전달되는 command = productDetail

    => ProductDetailAction 만들기

     

    public class ProductDetailAction implements Action {
    
    	@Override
    	public void execute(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
    		
    		int pseq = Integer.parseInt(request.getParameter("pseq"));
    		ProductDao mdao = ProductDao.getInstance();
    		ProductVO mvo = mdao.getProduct(pseq);
    		
    		request.setAttribute("productVO", mvo);
    		
    		RequestDispatcher dp = request.getRequestDispatcher("product/productDetail.jsp");
    		dp.forward(request, response);
    	}
    
    }

     

     

    2) product 폴더와 productdetail.jsp 만들기

    -> prduct 폴더 안에 sub_menu.html, sub_img.html을 새로 만듦

     

     sub_menu.html

     

    <nav id="sub_menu">
    	<ul>
    		<li><a href="shop.do?command=category&kind=1">Heels</a></li>
    		<li><a href="shop.do?command=category&kind=2">Boots</a></li>
    		<li><a href="shop.do?command=category&kind=3">Sandals</a></li>
    		<li><a href="shop.do?command=category&kind=4">Sneakers</a></li>
    		<li><a href="shop.do?command=category&kind=5">Sleeper</a></li>
    		<li><a href="shop.do?command=category&kind=6">On Sale</a></li>
    	</ul>
    </nav>

     

     

     

    3) CategoryAction

     

    public class CategoryAction implements Action {
    
    	@Override
    	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String kind = request.getParameter("kind");
    		ProductDao pdao = ProductDao.getInstance(); 
    		ArrayList<ProductVO> list  = pdao.selectKindProduct(kind);
    		request.setAttribute("productKindList", list);
    		String url = "product/productKind.jsp";
    		request.getRequestDispatcher(url).forward(request, response);
    	}
    }

     

     

    4) selectKindProduct(kind) 메소드 

     

    public ArrayList<ProductVO> selectKindProduct(String kind) {
        ArrayList<ProductVO> list = new ArrayList<>();
        String sql = "select * from product where kind = ?";
        con = Dbman.getConnection();
        try {
            pstmt = con.prepareStatement(sql);
            pstmt.setString(1, kind);
            rs = pstmt.executeQuery();
            while(rs.next()) {
                ProductVO pvo = new ProductVO(); 
                pvo.setPseq(rs.getInt("pseq"));
                pvo.setName(rs.getString("name"));
                pvo.setKind(rs.getString("kind"));
                pvo.setPrice2(rs.getInt("price2"));
                pvo.setImage(rs.getString("image"));
                list.add(pvo);
            }
        } catch (SQLException e) { e.printStackTrace();
        } finally { Dbman.close(con, pstmt, rs); }
    
        return list;
    }

     

     

    5) productKind.jsp

     

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ include file="../header.jsp" %>
    <%@ include file="sub_img.html"%> 
    <%@ include file="sub_menu.html" %>
    
    <article>
    <h2> Item </h2>
    <c:forEach items="${productKindList}" var="ProductVO">
    	<div id="item">
    		<a href="shop.do?command=productDetail&pseq=${ProductVO.pseq}">
    			<img src="product_images/${ProductVO.image}"/>
    			<h3>${ProductVO.name}</h3>
    			<p>${ProductVO.price2}</p>
    		</a>
    	</div>
    </c:forEach>
    <div class="clear"></div>
    </article>
    
    
    <%@ include file="../footer.jsp" %>

     

     

    *sub_menu css가 안먹는데 원인을 모르겠음...

     

    => sub_menu.html 에서 메뉴 이름을 <a>태그 밖에 씀 ...^^... 

     

     

    수정 끝

     


     

    장바구니

     

     

    1) 상품 상세페이지에서 장바구니에 담기 클릭시 go_cart() 함수 실행 

    -> 장바구니는 마이페이지 영역이므로 mypage.js에 생성

     

    function go_cart(){
    	if(document.formm.quantity.value == "") {
    		alert("수량을 입력하세요")
    		document.formm.quantity.focus();
    	} else { 
    		document.formm.action = "shop.do?command = cartInsert";
    		document.formm.submit();
    	}
    }

     

     

    2) CartVO

     

    public class CartVO {
    	private Integer cseq;
    	private String id;
    	private String mname;
    	private String pname;
    	private Integer pseq;
    	private Integer quantity;
    	private Integer price2;
    	private Timestamp indate;
    	private String result;
    
    //이하 getter, setter
    
    }

     

    3) CartDao 생성 

     

    4) CartInsertAction 

     

    public class CartInsertAction implements Action {
    
    	@Override
    	public void execute(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    		
    		HttpSession session = request.getSession();
    		MemberVO mvo = (MemberVO)session.getAttribute("loginUser");
    		String url = "";
    		if(mvo == null) {
    			url = "shop.do?command=loginForm";
    		} else {
    			//로그인 중인 아이디, 전달된 파라미터의 수량과 상품번호를 CartVO에 넣고 insert
    			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";
    		}
    		//insert 후, 카트리스트를 조회(cart_view)해서 cartList.jsp로 이동
    		
    		response.sendRedirect(url);
    	}
    }

     

     

    5) insertCart(cvo)메소드

     

    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); }
    }

     

     

    6) CartListAction 

     

    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);
    	}
    }

     

     

    7) selectCart(mvo.getId()) 메소드 

    -> 로그인한 유저의 id로 cart 테이블 검색 후 결과 출력 

     

    public ArrayList<CartVO> selectCart(String id) {
        ArrayList<CartVO> list = new ArrayList<>();
        String sql = "select * from cart_view where id = ? and result='1'";
        //result=1 : 미처리 result=2 : 처리 
        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.setPname(rs.getString("pname"));
                cvo.setPseq(rs.getInt("pseq"));
                cvo.setQuantity(rs.getInt("quantity"));
                cvo.setPrice2(rs.getInt("price2"));
                cvo.setIndate(rs.getTimestamp("indate"));
                list.add(cvo);
            }
        } catch (SQLException e) {e.printStackTrace();
        }
        return list;
    }

     

     

    8) mypage/sub_img.html

     

    <div id="sub_img" align="center">
    	<img src="images/mypage/sub_img.jpg" style="border-radius:20px 20px 20px 20px">
    </div>
    <div class="clear"></div>

     

     

    9) mypage/sub_menu.jsp

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <meta charset = "UTF-8">
    
    <nav id="sub_menu">
    	<ul>
    		<li><a href="shop.do?commad=cartList">장바구니 내역</a><li>
    		<li><a href="shop.do?commad=myPage">주문 확인</a><li>
    		<li><a href="shop.do?commad=orderAll">총 주문내역</a><li>
    	</ul>
    </nav>

     

     

    8) mypage/cartList.jsp

     

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ include file="../header.jsp" %>
    <%@ include file="sub_img.html"%> 
    <%@ include file="sub_menu.jsp" %>
    
    <article>
    <h2>Cart List</h2>
    <form name="formm" method="post">
    	<c:choose>
    		<c:when test="${carList.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></tr>
    					<c:forEach items="${cartList}" var="cartVo">
    						<tr><td><a href="shop.do?command=productDetail&pseq=${cartVo.pseq}">
    						<h3>${cartVo.pname}</h3> </a></td><td>${cartVo.quantity}</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="location.href='shop.do?command=index'">
    	<c:if test="${cartList.size()!=0}">
    		<input type="button" value="주문하기" class="submit" onClick="go_order_inser();">
    	</c:if>
    	
    </div>
    </form>
    </article>
    
    <%@ include file="../footer.jsp" %>

     

     

     

     

    9) go_cart_delete() 함수

    -js는 같은 name이 두개 이상 있는 입력란들을 배열로 인식, 한 개만 있을 경우 배열로 인식 못하기 때문에 length 사용 불가 하기 때문에 checkbox들 중 체크된 항목에 따라 처리 방법이 달라져야 한다. 

     

    function go_cart_delete(){
    	var count = 0;
    	if(document.formm.cseq.length==undefined) {
    		//장바구니에 물건이 하나일 때 해당 항목에 체크가 되어있는지 검사해서 count에 적용
    		if(document.formm.cseq.checked==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();
    	}
    	//몇 개 체크되었는지 갯수를 세고 하나도 체크되지 않았다면 되돌아감
    }

     

     

    10) CartDeleteAction

    -함수에서 체크된 항목들의 정보가 배열로 전달되기 때문에 이 클래스에서도 배열로 cseq 를 받는다 .

     

    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");
    	}
    }

     

     

    11) deleteCart(int cseq) 메소드 

     

    public ArrayList<CartVO> selectCart(String id) {
        ArrayList<CartVO> list = new ArrayList<>();
        String sql = "select * from cart_view where id = ? and result='1'";
        //result=1 : 미처리 result=2 : 처리 
        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.setPname(rs.getString("pname"));
                cvo.setPseq(rs.getInt("pseq"));
                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;
    }
    
    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); }
    }

     

     


     

     

    주문하기

     

    1) cartList에서 주문하기를 누르면 go_order_insert() 함수 호출

    -form에는 submit 기능이 한 번 밖에 들어갈 수 없으므로 여러 기능을 넣으려면 button을 만들고 js로 submit

     

    function go_order_insert() {
    	document.formm.action = "shop.do?command=orderInsert";
    	document.formm.submit();
    }

     

     

    2) OrderVO - order_view에 해당하는 dto

     

    public class OrderVO {
    	private int odseq;
    	private int oseq;
    	private String id;
    	private Timestamp indate;
    	private String mname;
    	private String pname;
    	private String zip_num;
    	private String address;
    	private String phone;
    	private int pseq;
    	private int quantity;
    	private int price2;
    	private String result;
    	
        //이하 getter, setter
        
    }

     

     

    3) OderDao 생성 (싱글턴 / con,pstmt, rs=null 설정)

     

    4) OrderInsertAction

     

    public class OrderInsertAction implements Action {
    
    	@Override
    	public void execute(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    		String url="";
    		HttpSession session = request.getSession();
    		MemberVO mvo = (MemberVO) session.getAttribute("loginUser");
    		if(mvo == null) {
    			url = "shop.do?command=loginForm";
    		} else {
    			CartDao cdao = CartDao.getInstance();
    			//주문자 id로 카트목록 먼저 조회
    			ArrayList<CartVO> list = cdao.selectCart(mvo.getId());
    			
    			//카트목록과 주문자의 아이디로 orderDetail에 데이터 추가
    			//추가한 주문의 주문번호를 리턴
    			OrderDao odao = OrderDao.getInstance();
    			int Oseq = odao.insertOrder(list,mvo.getId());
    			
    			//주문에 성공한 주문번호 -> 오더리스트로 이동, 주문번호로 주문내역을 다시 조회 
    			// -> jsp로 이동
    			url = "shop.do?command=orderList&oseq="+Oseq;
    		}
    		response.sendRedirect(url);
    	}
    }

     

     

    5) insertOrder(ArrayList<CartVO> list, String id) 부터는 내일

     

     

    댓글

Designed by Tistory.