ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210528_1(쇼핑몰)
    HTML_JS(Sol)/JSP(sol) 2021. 5. 28. 17:16

     

    개념

    앞에 공부하였던 내용이 모두 들어가 있다.

     여러개 테이블을 사용함

    세션 (장바구니) + 자료실 업로드컴포넌트 (상품이미지)

     

    ----------------------------------------------관리자

    ------------------------상품

    1. 제품등록

    2. 제품목록보기

    3. 제품정보 보기

    4. 제품정보 수정하기

    5. 제품정보 삭제하기

    ------------------------구매

    1. 판매 목록

    2. 진행 상황(구매-결제(pg회사대행)-배송(배송회사)-배송중-배송완료)

     

    -----------------------------------------------고객

    1. 제품목록 보기

    2. 제품상세 보기

    3. 장바구니에 넣기 - 입력 / 수정 / 삭제 <--- 중요

    4. 구매하기  -- 구매 --- 결제(pg회사대행) :PG -payment gateway : 결제대행회사

    5. 구매정보 보기 (배송(배송회사)-배송중-배송완료)


    준비 

    프로젝트생성 shopmall

    드라이버 : mysql-version.jar

    업로드 컴포넌트 : cos.jar

    이미지 위치 : C:\Java_bigdata\mywork_jsp\shopmall\WebContent\images


    공통 UI 만들기

    index.jsp : 초기 페이지 -- 요청 파일명이 없는경우 기본으로 응답하는 페이지

    Top.jsp --------템플릿 문서

    Bottom.jsp ----템플릿 문서 ------->디자인프레임워크도 존재, 요즘은 디자이 구성용 태그 새로나옴

     

    -----------------관리자용 문서들 /admin/xxx.jsp

    -------컨트롤러 ProductMgr.jsp

    요청을 받아서 - 요청분석 - 처리한 후 - 해당 결과 페이지로 이동

    -----------제품등록하기  ProductInsert.jsp

    클래스                     객체명

    HttpServeletRequest  requetst

     

    제품사진 :

     이미지 준비중 : ready.jpg <==미리 입력하고

    상품 이미지 : 몇장 준비 , 크기가 비슷한 걸로

    이미지 경로

    uploadDir  \\images\\

    #테이블 생성
    
    #-------------상품테이블
    
    create table shop_product (
    no int(5) not null auto_increment, #상품번호
    name varchar(20) null, #상품이름
    price varchar(10) null, #상품가격
    detail text null, #상품상세정보
    date datetime null, #상품등록날짜
    stock varchar(10) null, #상품 재고
    image varchar(20) null, #상품이미지이름
    PRIMARY KEY (no)
    )engine=innodb default charset=euckr;
    
    #---------------주문테이블
    create table shop_order(
    no int(5) not null auto_increment, #주문번호
    product_no varchar(5) not null, #상품 번호
    quantity varchar(10) null, #주문수량
    date datetime null, #주문일자
    state varchar(10) null, #주문상태
    id varchar(10) null, #회원아이디
    PRIMARY KEY (no)
    )engine=innodb default charset=euckr;
    
    #----------------관리자 테이블
    create table admin(
    admin_id varchar(20) not null, #관리자 아이디
    admin_passwd varchar(20) null, #관리자 비밀번호
    PRIMARY KEY (admin_id)
    
    );
    
    select * from shop_product;
    select * from shop_order;
    select * from admin;
    show tables;
    desc shop_product; #제품등록확인
    desc shop_order;
    
    alter table shop_order engine=innodb default charset=euckr;
    
    drop table shop_product;
    
    

    Top.jsp

    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <%
    String mem_id =(String) session.getAttribute("idkey");
    
    String log="";
    if(mem_id == null) log="<a href=Login.jsp>로그인</a>";
    else log ="<a href=Logout.jsp>로그아웃</a>";
    
    String mem="";
    if(mem_id ==null) mem="<a href=Register.jsp>회원가입</a>";
    else mem ="<a href=MemberUpdate.jsp>회원수정</a>";
    %>
    
    <table width="75%" align="center" bgcolor="#C1FF6B">
    <tr bgcolor="#80E12A">
    <td align="center"><b><%=log%></b></td>
    <td align="center"><b><%=mem%></b></td>
    <td align="center"><b><a href="ProductList.jsp">상품목록</a></b></td>
    <td align="center"><b><a href="CartList.jsp">상품목록</a></b></td>
    <td align="center"><b><a href="OrderList.jsp">상품목록</a></b></td>
    </tr>
    </table>

    script.js

    // 나중에 회원 가입 관련 함수들과 합칠것
    
    function productDetail(no){
    	document.detail.no.value=no;
    	document.detail.submit();
    }
    function cartUpdate(form){
    	form.flag.value="update";
    	form.submit();
    }
    function cartDelete(form){
    	form.flag.value="del";
    	form.submit();
    }
    function test(){
    	alert("success")
    }

    index.jsp

    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="EUC-KR">
    <title>Simple Shopping Mall</title>
    <link href="style.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="script.js"></script> 
    </head>
    <body bgcolor="#FFFFFF" topmargin="100">
    <%@ include file="Top.jsp" %>
    <table width="75%" align="center" bgcolor="#65FFBA" height="100%">
    <%
    if(mem_id != null){
    %>
    <tr>
    <Td align="center"><%=mem_id%>님 방문해 주셔서 감사합니다.</Td>
    </tr>
    <%}else{ %>
    <tr>
    <Td align="center">로그인 하신 후 이용해 주세요</Td>
    </tr>
    <%} %>
    </table>
    
    <%@ include file="Bottom.jsp" %>
    
    </body>
    </html>

     

     

    상품등록 폼

     

    ProductInsert.jsp

    **유효성검사만들어보기**

    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="EUC-KR">
    <title>Simple Shopping Mall Admin</title>
    
    <script type="text/javascript" src="../js/script.js"></script>
    
    </head>
    <body bgcolor=""#996600" topmargin="100">
    
    
    <%@include file="../Top.jsp" %>
    <table width="75%" align="center" bgcolor="FFFF99">
    <tr>
    <td align="center" bgcolor="#FFFFCC">
    <form method="post" action="ProductProc.jsp?flag=insert" enctype="multipart/form-data">
    <tr bgcolor="#996600">
    <td colspan="2" align="center"><font color="#FFFFFF">상품 등록</font></td>
    </tr>
    <tr>
    <td align="center">상품 이름</td>
    <td align="left"><input type="text" name="name" size="20"></td>
    </tr>
    <tr>
    <td align="center">상품 가격</td>
    <td align="left"><input type="text" name="price" size="20">원</td>
    </tr>
    <tr>
    <td align="center">상품 설명</td>
    <td align="left"><textarea rows="10" cols="45" name="detail"></textarea></td>
    </tr>
    <tr>
    <td align="center">상품 수량</td>
    <td align="left"><input type="text" name="stock" size="10">개</td>
    </tr>
    <tr>
    <td align="center">상품이미지</td>
    <td><input type="file" name="image"></td>
    </tr>
    <tr>
    <td colspan="2" align="center">
    <input type="submit" value="상품등록">&nbsp;&nbsp;&nbsp;
    <input type="reset" value="다시쓰기">
    </td>
    </tr>
    </form>
    </table>
    <%@include file="../Bottom.jsp" %>
    
    
    </body>
    </html>

    RegisterBean.java 데이터빈

    package ch14;
    
    public class RegisterBean {
    
    	private String mem_id;
    	private String mem_passwd;
    	private String mem_name;
    	private String mem_num1;
    	private String mem_num2;
    	private String mem_email;
    	private String mem_phone;
    	private String mem_zipcode;
    	private String mem_address;
    	private String mem_job;
    	
    	public String getMem_id() {
    		return mem_id;
    	}
    	public void setMem_id(String mem_id) {
    		this.mem_id = mem_id;
    	}
    	public String getMem_passwd() {
    		return mem_passwd;
    	}
    	public void setMem_passwd(String mem_passwd) {
    		this.mem_passwd = mem_passwd;
    	}
    	public String getMem_name() {
    		return mem_name;
    	}
    	public void setMem_name(String mem_name) {
    		this.mem_name = mem_name;
    	}
    	public String getMem_num1() {
    		return mem_num1;
    	}
    	public void setMem_num1(String mem_num1) {
    		this.mem_num1 = mem_num1;
    	}
    	public String getMem_num2() {
    		return mem_num2;
    	}
    	public void setMem_num2(String mem_num2) {
    		this.mem_num2 = mem_num2;
    	}
    	public String getMem_email() {
    		return mem_email;
    	}
    	public void setMem_email(String mem_email) {
    		this.mem_email = mem_email;
    	}
    	public String getMem_phone() {
    		return mem_phone;
    	}
    	public void setMem_phone(String mem_phone) {
    		this.mem_phone = mem_phone;
    	}
    	public String getMem_zipcode() {
    		return mem_zipcode;
    	}
    	public void setMem_zipcode(String mem_zipcode) {
    		this.mem_zipcode = mem_zipcode;
    	}
    	public String getMem_address() {
    		return mem_address;
    	}
    	public void setMem_address(String mem_address) {
    		this.mem_address = mem_address;
    	}
    	public String getMem_job() {
    		return mem_job;
    	}
    	public void setMem_job(String mem_job) {
    		this.mem_job = mem_job;
    	}
    
    	
    
    }
    

    ProductMgr.java 처리빈

    package ch14;
    
    import com.oreilly.servlet.*;
    import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
    import javax.servlet.http.HttpServletRequest;
    import java.sql.*;
    import java.util.Vector;
    
    public class ProductMgr {
    
    	private DBConnectionMgr pool = null;
    
    	public ProductMgr() {
    		try {
    			pool = DBConnectionMgr.getInstance();
    		} catch (Exception e) {
    			System.out.println("ERROR : 커넥션 가져오기 실패 !!");
    		}
    	}
    
    
    

    ProductProc.jsp 컨트롤러

    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    <jsp:useBean id="proMgr" class="ch14.ProductMgr"/>
    <%
    String flag =request.getParameter("flag");
    boolean result = false;
    
    if(flag.equals("insert")){
    	result =proMgr.insertProduct(request);
    	
    }else if(flag.equals("update")){
    	//result=proMgr.updateProduct(request);
    }else if(flag.equals("delete")){
    	//result=proMgr.deleteProduct(request.getParameter("no"));
    }else{
    	response.sendRedirect("ProductMgr.jsp");
    }
    if(result){
    %>
    <script>
    alert("처리하였습니다");
    location.href="ProductMgr.jsp";
    </script>
    <%}else{ %>
    <script>
    alert("오류가 발생하였습니다.");
    location.href="ProductMgr.jsp";
    </script>
    <%} %>
    

     

    ProductMgr.java 등록처리 추가

     

    
    //////////////////// 비지니스 메소드들이 들어오는 곳/////////////
    
    	public boolean insertProduct(HttpServletRequest req) {
    		Connection con = null;
    		PreparedStatement pstmt = null;
    		boolean result = false;
    
    		try {
    			String uploadDir = "C:\\Java_bigdata\\mywork_jsp\\shopmall\\WebContent\\images\\";
    														//(request, "저장경로", 크기제한, "인코딩", 중복파일처리)
    			MultipartRequest multi = new MultipartRequest(req, uploadDir, 5 * 1024 * 1024, "euc-kr",
    					new DefaultFileRenamePolicy());
    
    			con = pool.getConnection();
    			String query = " insert into shop_product(name, price, detail, date, stock, image)"
    					+ "values(?,?,?,now(),?,?)";
    
    			pstmt = con.prepareStatement(query);
    			pstmt.setString(1, multi.getParameter("name"));
    			pstmt.setString(2, multi.getParameter("price"));
    			pstmt.setString(3, multi.getParameter("detail"));
    			pstmt.setString(4, multi.getParameter("stock"));
    
    			if (multi.getFilesystemName("image") == null) {
    				pstmt.setString(5, "ready.png");
    			} else {
    				pstmt.setString(5, multi.getFilesystemName("image"));
    			}
    			int count = pstmt.executeUpdate();
    			if (count == 1)
    				result = true;
    		} catch (Exception ex) {
    			System.out.println("Exception : " + ex);
    		} finally {
    			pool.freeConnection(con, pstmt);
    		}
    		return result;
    	}

     

     

    경로

    /ProductProc.jsp 루트아래 있는

    ./ProductProc.jsp ProductProc.jsp 현재 경로 즉 같은 폴더에 있는 경우

    /admin/ProductProc.jsp

     

    클래스명 자리에 빨간줄이 가면, 참조가 안된 것이다.

    package를 확인하고, import 해라

     

Designed by Tistory.