기초단계/JSP&Servlet

2023.03.29 JSP

춘핑이 2023. 3. 29. 18:03

JSP 쇼핑몰 만들기

59. 차량 예약하기

예약하기를 누르면 가장 잘 나가는 것을 3가지 임의로 뿌리기
원래대로는 추천수를 받아서 출력하게 햇을 것이다.

최신의 데이터 3개만 가져오자.
밑에는 차량종류 선택 검색 / 전체검색 할 수 있도록하기
검색은 카테고리에 따라 분류하면된다.
예약하기를 누르면 CarReserveMain.jsp이 로드되게 하자.

59.1 최신순 띄우기

성능으로 따지면 sql문으로 선택하고 설계한다면 코드로만 설계할 수도 있다.

public List<CarListBean> getSelectCar() {
    List<CarListBean> list = new ArrayList<>();
    getCon();
    try {
        String sql = "SELECT * FROM RENTCAR ORDER BY NO DESC";
        pstmt = con.prepareStatement(sql);
        rs = pstmt.executeQuery();

        int count = 0;
        while (rs.next()) {
            CarListBean bean = new CarListBean();
            bean.setNo(rs.getInt(1));
            bean.setName(rs.getString(2));
            bean.setCategory(rs.getInt(3));
            bean.setPrice(rs.getInt(4));
            bean.setUsepeople(rs.getInt(5));
            bean.setCompany(rs.getString(6));
            bean.setImg(rs.getString(7));
            bean.setInfo(rs.getString(8));
            list.add(bean);
            //3개만 저장
            count++;
            if (count > 2) {
                break;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

59.2 CarReserveMain.jsp

Top에서 예약하기를 누를때 center의 파라미터로 이 페이지를 주면된다.

<!-- 데이터 베이스에 연결하여 최신순 자동차 3대만 뿌려주는 데이터를 가져옴 -->
<%
    RentcarDAO rdao = new RentcarDAO();
    //리스트를 이용하여 데이터를 저장
    List<CarListBean> list = rdao.getSelectCar();
%>
<div align="center">
    <table>
        <tr height = "240">
        <%
            for (int i =0 ; i < list.size(); i++){
                CarListBean bean = list.get(i);
        %>        
            <td width="333" align="center">
                <a href="CarReserveinfo.jsp?no=<%=bean.getNo()%>">
                    <img src="img/<%=bean.getImg() %>"  width="300" height="200" alt="" />
                </a><p>
                차량명 : <%= bean.getName() %>
                </p>
            </td>
        <%        
            }
        %>
        </tr>
    </table>

    <hr color="red" size="3"/>
    <p>
        <font size="4" color="black"> 차량검색하기 </font> <br /><br /><br />
        <form action="CarCategoryList.jsp" method="post">
            <font size="3" color="black"> <b>차량검색하기</b></font> &nbsp;&nbsp;
            <select name="category">
                <option value="1">소형</option>
                <option value="2">중형</option>
                <option value="3">대형</option>
            </select> &nbsp;&nbsp;
            <input type="submit"  value="검색"/> &nbsp;&nbsp;
            <button type="button" onclick="location.href='CarAllList.jsp'">전체 검색</button>
        </form>
</div>

61. 차량 검색하기

지난시간은 예약하기 버튼으로 최신순 3개 만 나왔다.

소형 중형 대형으로 검색하자.
Select하면되는데 카테고리별로만 Select만하면된다.
3개씩 뿌려주며 3개이후 다음으로 가기
3개가 만들어질때마다 tr을 만들어주기

public List<CarListBean> getCategoryCar(int category) {
    List<CarListBean> list = new ArrayList<>();
    // 데이터를 저장할 빈 클래스 선언
    CarListBean bean = null;

    getCon();

    try {
        String sql = "SELECT * FROM RENTCAR WHERE CATEGORY = ? ";
        pstmt = con.prepareStatement(sql);
        pstmt.setInt(1, category);
        rs = pstmt.executeQuery();

        while (rs.next()) {
            bean = new CarListBean();
            bean.setNo(rs.getInt(1));
            bean.setName(rs.getString(2));
            bean.setCategory(rs.getInt(3));
            bean.setPrice(rs.getInt(4));
            bean.setUsepeople(rs.getInt(5));
            bean.setCompany(rs.getString(6));
            bean.setImg(rs.getString(7));
            bean.setInfo(rs.getString(8));
            list.add(bean);
        }
        con.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

61.2 차량별 list

<div align="center">
    <table>
        <%
            //카테고리 분류값을 받아오기
            int category = Integer.parseInt(request.getParameter("category"));
            RentcarDAO rdao = new RentcarDAO();

            List<CarListBean> list = rdao.getCategoryCar(category); 
            //tr을 3개씩 보여주고 다시 tr을 실행할 수 있도록 적용하는 변수
            int j = 0;
            for (int i = 0; i < list.size(); i++){
                CarListBean bean = list.get(i);
                if (j%3==0){
        %>        
            <tr height="220">
        <%
            }
        %>
            <td width="333" align="center">
                <a href="RentcarMain.jsp?center=CarReserveInfo.jsp?no=<%= bean.getNo()%>"> 
                    <img src="img/<%=bean.getImg() %>" width="300" height="200"/>
                </a> <p>
                <font size="3" color="black">차량명 : <%= bean.getName() %></font></p>        
            </td>

        <%
            j = j + 1;    //j값을 증가하여 하나의 행에 총 3개의 차량 정보 보여주기
            }
        %>
    </table>
</div>

62. 차량 전체보기

차량 list를 얻는 메소드를 작성하는데 SQL문만 다시 작성해주면 된다.

public List<CarListBean> getAllCar() {
    List<CarListBean> list = new ArrayList<>();
    // 데이터를 저장할 빈 클래스 선언
    CarListBean bean = null;

    getCon();

    try {
        String sql = "SELECT * FROM RENTCAR";
        pstmt = con.prepareStatement(sql);
        rs = pstmt.executeQuery();

        while (rs.next()) {
            bean = new CarListBean();
            bean.setNo(rs.getInt(1));
            bean.setName(rs.getString(2));
            bean.setCategory(rs.getInt(3));
            bean.setPrice(rs.getInt(4));
            bean.setUsepeople(rs.getInt(5));
            bean.setCompany(rs.getString(6));
            bean.setImg(rs.getString(7));
            bean.setInfo(rs.getString(8));
            list.add(bean);
        }
        con.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

63. 쇼핑몰 - 차량 상세보기

하나의 차량을 상세보기로 만들어주자.
number를 기준으로 보면된다.

63.1 DAO

// 한대의 차량 가져오기
public CarListBean getOneCar(int no) {
    CarListBean bean = new CarListBean();

    getCon();

    try {
        String sql = "SELECT * FROM RENTCAR WHERE NO = ?";
        pstmt = con.prepareStatement(sql);
        pstmt.setInt(1, no);

        rs = pstmt.executeQuery();

        if (rs.next()) {
            bean.setNo(rs.getInt(1));
            bean.setName(rs.getString(2));
            bean.setCategory(rs.getInt(3));
            bean.setPrice(rs.getInt(4));
            bean.setUsepeople(rs.getInt(5));
            bean.setCompany(rs.getString(6));
            bean.setImg(rs.getString(7));
            bean.setInfo(rs.getString(8));
        }
        con.close();
    } catch(Exception e) {
        e.printStackTrace();
    }
    return bean;
}

63.2 자세한 페이지

누르면 옵션으로 가서 결제하자.
게스트는 구매할 수 없게 해서 로그인 처리를 해야한다.

<%
    int no = Integer.parseInt(request.getParameter("no"));

    RentcarDAO rdao = new RentcarDAO();

    //하나의 정보 얻기
    CarListBean bean = rdao.getOneCar(no);

    //카테고리 분류값을 받아오기
    int category = bean.getCategory();
    String temp = "";
    if ( category == 1){
        temp = "소형";
    } else if (category == 2){
        temp = "중형";
    } else {
        temp = "대형";
    }
%>

<div align="center">
    <form action="RentcarMain.jsp?center=CarOptionSelect.jsp">
        <table>
            <tr height="100">
                <td align="center" colspan="3">
                    <font size="6" color="gray"><%=bean.getName() %> 차량 선택</font>
                </td>
            </tr>

            <tr>
                <td rowspan="6" align="center" width="500">
                    <img src="img/<%=bean.getImg() %>" width="450" />
                    <td width="250" align="center"> 차량이름 </td>
                <td width="250" align="center"> <%=bean.getName() %> </td>
                </td>
            </tr>

            <tr>
                <td width="250" align="center"> 차량수량 </td>
                <td width="250" align="center"> 
                    <select name="qty">
                        <option value="1">1</option>
                        <option value="1">2</option>
                        <option value="1">3</option>
                    </select>
                </td>
            </tr>

            <tr>
                <td width="250" align="center"> 차량분류 </td>
                <td width="250" align="center"> <%=temp %> </td>
            </tr>

            <tr>
                <td width="250" align="center"> 대여가격 </td>
                <td width="250" align="center"> <%= bean.getPrice() %>원 </td>
            </tr>

            <tr>
                <td width="250" align="center"> 제조회사 </td>
                <td width="250" align="center"> <%= bean.getCompany() %> </td>
            </tr>

            <tr>
                <td colspan="2" align="center">
                    <input type="hidden" name="no" value="<%= bean.getNo() %>" />
                    <input type="submit" value="옵션선택 후 구매하기"/> 
                 </td>
            </tr>
        </table>
        <br /><br /><br />
    <font size="5" color="gray">차량 정보 보기</font>
    <p>
    <%= bean.getInfo() %>
    </p>
    </form>
</div>

64. 쇼핑몰 - 차량 구매하기

로그인이 안되있으면 선택을 못하게 하자.
옵션선택 대여기간 대여일 보험적용 무선 wifi네비 베이비시트 예약하기
만약에 날짜가 오늘보다 이전날짜면 선택 못하게 해주기 등 나중에 추가할예정임

<%
    int no = Integer.parseInt(request.getParameter("no"));
    //차량 수량
    int qty = Integer.parseInt(request.getParameter("qty"));
    String img = request.getParameter("img");
%>

<div align="center">
    <form action="RentcarMain.jsp?center=CarReserveResult.jsp" method="post">
        <table>
            <tr height="100">
                <td align="center" colspan="3">
                    <font size="6" color="gray">옵션 선택</font>
                </td>
            </tr>

            <tr>
                <td rowspan="7" align="center" width="500">
                    <img src="img/<%=img %>" width="450" />
                    <td width="250" align="center"> 대여기간 </td>
                    <td>
                        <select name="dday" >
                            <option value="1">1일</option>
                            <option value="2">2일</option>
                            <option value="3">3일</option>
                            <option value="4">4일</option>
                            <option value="5">5일</option>
                            <option value="6">6일</option>
                            <option value="7">7일</option>
                        </select>
                    </td>
                </tr>


            <tr>
                <td width="250" align="center"> 대여일 </td>
                <td><input type="date" name="rday" size="15" /></td>
            </tr>

            <tr>
                <td width="250" align="center"> 보험적용 </td>
                <td>
                    <select name="usein">
                        <option value="1">적용 (1일 1만원) </option>
                        <option value="2">비적용</option>
                    </select>
                </td>
            </tr>

            <tr>
                <td width="250" align="center"> 와이파이 </td>
                <td>
                    <select name="usewifi">
                        <option value="1">적용 (1일 1만원)</option>
                        <option value="2">비적용</option>
                    </select>
                </td>
            </tr>

            <tr>
                <td width="250" align="center"> 네비게이션 적용 </td>
                <td>
                    <select name="usenavi">
                        <option value="1">적용 (무료)</option>
                        <option value="2">비적용</option>
                    </select>
                </td>
            </tr>

            <tr>
                <td width="250" align="center"> 베이비시트 적용 </td>
                <td>
                    <select name="useseat">
                        <option value="1">적용 (1일 1만원)</option>
                        <option value="2">비적용</option>
                    </select>
                </td>
            </tr>

            <tr>
                <td colspan="2" align="center"> 베이비시트 적용 </td>
                <td><input type="submit" value="차량예약하기" /></td>
            </tr>
        </table>
    </form>
</div>