-
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) 부터는 내일
'학원 > JSP SERVLET' 카테고리의 다른 글
2022-01-24 jsp 쇼핑몰 만들기#6 (0) 2022.01.24 2022-01-21 jsp 쇼핑몰 만들기 #5 (0) 2022.01.21 2022-01-19 jsp 쇼핑몰 만들기 #3 (0) 2022.01.19 2022-01-18 jsp 쇼핑몰 만들기 #2 (0) 2022.01.18 2022-01-17 jsp 쇼핑몰 만들기 #1 (0) 2022.01.17