19.05.20 jsp 쇼핑몰 차량 구매하기 예약 및 결과 (동영상 69강~70강)
Back-End/JSP 2019. 5. 20. 18:00쇼핑몰 차량 예약 확인
DB테이블 시퀀스 설정 (값이 계속해서 올라가야 하기 때문)
SQL 파일
CarReserveView.jsp (차량 예약 확인 페이지)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | <%@page import="db.CarViewBean"%> <%@page import="db.CarReserveBean"%> <%@page import="java.util.Vector"%> <%@page import="db.RentcarDAO"%> <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> <title>Insert title here</title> </head> <body> <!-- 차량예약할시에 보여지는 페이지 --> <% String id = (String) session.getAttribute("id"); //얻어온 아이디가 null일 시에 (즉 비로그인 상태일때 실행하는 구문) if (id == null) { %> <script> //로그인 페이지를 보여준다. alert("로그인"); location.href = 'RentcarMain.jsp?center=MemberLogin.jsp'; </script> <% } //로그인 되어있는 아이디를 읽어옴 RentcarDAO rdao = new RentcarDAO(); //몇개의 아이디를 받아올지 확실하지 않기때문에 벡터를 사용한다. Vector<CarViewBean> v = rdao.getAllReserve(id); %> <center> <table width="1000" border="1"> <tr height="100"> <td align="center" colspan="11"><font size="6" color="gray"> 차량 예약 화면 </font></td> </tr> <tr height="40"> <td width="150" align="center">이미지</td> <td width="150" align="center">이름</td> <td width="150" align="center">대여일</td> <td width="60" align="center">대여기간</td> <td width="100" align="center">금액</td> <td width="60" align="center">수량</td> <td width="60" align="center">보험</td> <td width="60" align="center">wifi</td> <td width="60" align="center">베이비시트</td> <td width="60" align="center">네비게이션</td> <td width="90" align="center">삭제</td> </tr> <% //벡터로 얻은 값들을 출력해서 bean에 저장함 for (int i = 0; i < v.size(); i++) { CarViewBean bean = v.get(i); %> <!-- 빈이 가지고있는 값들을 하나씩 출력 한다. --> <tr height="40" bordercolor="blue"> <td width="150" align="center"><img alt="" src="img/<%=bean.getImg()%>" width="120" height="70"></td> <td width="150" align="center"><%=bean.getName()%></td> <td width="150" align="center"><%=bean.getRday()%></td> <td width="60" align="center"><%=bean.getDday()%></td> <td width="100" align="center"><%=bean.getPrice()%> 원</td> <td width="60" align="center"><%=bean.getQty()%></td> <td width="60" align="center"><%=bean.getUsein()%></td> <td width="60" align="center"><%=bean.getUsewifi()%></td> <td width="60" align="center"><%=bean.getUseseat()%></td> <td width="60" align="center"><%=bean.getUsenavi()%></td> <!-- 삭제 페이지로 이동함 --> <td width="90" align="center"> <button onclick="location.href='CarReserveDel.jsp'">삭제</button> </td> </tr> <% } %> </table> </center> </body> </html> | cs |
CarReserveResult.jsp (차량 예약 결과)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | <%@page import="db.CarListBean"%> <%@page import="db.RentcarDAO"%> <%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.Date"%> <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> <title>Insert title here</title> </head> <body> <!-- 한글이 넘어올수도 있기 때문에 문자셋설정을 다시한다. --> <% request.setCharacterEncoding("euc-kr"); %> <!-- 한번에 빈클래스에 있는 값들을 받아야되서 useBean 사용 --> <jsp:useBean id="rbean" class="db.CarReserveBean"> <jsp:setProperty name="rbean" property="*" /> </jsp:useBean> <% //로그인한 아이디가 페이지가 변경되어도 유지가 되어야하기 때문에 세션으로 받는다. //받는 아이디는 오브젝트 타입이기 때문에 String 타입으로 타입변환을 시켜준다. String id = (String) session.getAttribute("id"); //null값과 비교할시에는 GUEST값이 나와버리므로 //null 대신에 GUEST와 비교한다. //비교한후에 참이면 (로그인이 안되었으면) 로그인페이지로 이동하게함 if (id == null) { %> <script> //예약할시에 로그인이 안되어있을경우 출력되는 메시지 alert("로그인후 예약이 가능합니다."); //로그인이 안되어있을경우 로그인 페이지로 이동 location.href = 'RentcarMain.jsp?center=MemberLogin.jsp'; </script> <% } //날짜 비교 (현재 날짜보다 앞에 날짜는 선택 못하게 하기.. ) Date d1 = new Date(); Date d2 = new Date(); //날짜를 2016-4-4 로 포맷해주는 클래스 선언, month은 대문자 M을 사용 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //d1은 yyyy-MM-dd 형식으로 변경된다. d1 = sdf.parse(rbean.getRday()); //d2는 yyyy-MM-dd 형식으로 변경된다. d2 = sdf.parse(sdf.format(d2)); //날짜 비교 메소드를 사용가능 date 클래스 사용 int compare = d1.compareTo(d2); //예약하려는 날짜보다 현재 날짜가 크다면 -1을 반환 //예약하려는 날짜와 현재 날짜가 같다면 0을 반환 //예약하려는 날짜가 더 크다면 1을 리턴함 if (compare < 0) { //오늘보다 이전 날짜 선택시 예약이 안되게끔 해야함 %> <script> alert("현재 시스템 날짜보다 이전 날짜는 선택할 수 없음"); history.go(-1);//이전 단계로 이동하시오. </script> <% } //결과적으로 아무런 문제가 없다면 데이터 저장후 결과 페이지로 이동하기 //아이디값이 빈 클래스에 없고, 세션에 저장시켰기 때문 //id는 null값이 들어갈수 있으므로 변수이름을 id1 으로 한다. String id1 = (String) session.getAttribute("id"); rbean.setId(id1); //데이터베이스에 빈클래스를 저장함 RentcarDAO rdao = new RentcarDAO(); rdao.setReserveCar(rbean); //차량정보 얻어오기 CarReserveBean에는 차량 사진이 저장되어 있지 않기때문에 다른곳에서 얻어와야 한다. CarListBean cbean = rdao.getOneCar(rbean.getNo()); //차량 총 금액, 금액 * 차량 대수 * 빌리는 날짜 int totalcar = cbean.getPrice() * rbean.getQty() * rbean.getDday(); //옵션 금액 int usein = 0; if (rbean.getUsein() == 1) usein = 10000; int usewifi = 0; if (rbean.getUsewifi() == 1) usewifi = 10000; int useseat = 0; if (rbean.getUseseat() == 1) useseat = 10000; //옵션의 총금액 (보험 등등등) int totaloption = (rbean.getQty() * rbean.getDday()) * (usein + usewifi + useseat); %> <center> <table width="1000"> <tr height="100"> <td align="center"><font size="6" color="gray"> 차량 예약 완료 화면 </font></td> </tr> <tr> <td align="center"><img alt="" src="img<%=cbean.getImg()%>" width="470"></td> </tr> <tr height="50"> <td align="center"><font size="5" color="red"> 차량 총예약 금액 <%=totalcar%>원 </font></td> </tr> <tr height="50"> <td align="center"><font size="5" color="red"> 차량 총옵션 금액 <%=totaloption%>원 </font></td> </tr> <tr height="50"> <td align="center"><font size="5" color="red"> 차량 총 금액 <%=totaloption + totalcar%>원 </font></td> </tr> </table> </center> </body> </html> | cs |
CarViewBean.java (두 테이블을 조인한 값을 저장하는 빈 클래스)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | package db; public class CarViewBean {// 두 테이블을 조인한 값을 저장하는 빈 클래스 private String name; private int price; private String img; private int qty; private int dday; private String rday; private int usein; private int usewifi; private int useseat; private int usenavi; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public String getImg() { return img; } public void setImg(String img) { this.img = img; } public int getQty() { return qty; } public void setQty(int qty) { this.qty = qty; } public int getDday() { return dday; } public void setDday(int dday) { this.dday = dday; } public String getRday() { return rday; } public void setRday(String rday) { this.rday = rday; } public int getUsein() { return usein; } public void setUsein(int usein) { this.usein = usein; } public int getUsewifi() { return usewifi; } public void setUsewifi(int usewifi) { this.usewifi = usewifi; } public int getUseseat() { return useseat; } public void setUseseat(int useseat) { this.useseat = useseat; } public int getUsenavi() { return usenavi; } public void setUsenavi(int usenavi) { this.usenavi = usenavi; } } | cs |
CarReserveBean.java (차량 예약 빈 클래스)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | package db; public class CarReserveBean { private int reserveno; private String id; private int no; private int qty; private int dday; // 대여기간 private String rday; // 대여일은 date타입으로 받았지만 넘겨줄때 String타입으로 변하므로 String타입으로 해야함 private int usein; private int usewifi; private int useseat; private int usenavi; public int getReserveno() { return reserveno; } public void setReserveno(int reserveno) { this.reserveno = reserveno; } public String getId() { return id; } public void setId(String id) { this.id = id; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public int getQty() { return qty; } public void setQty(int qty) { this.qty = qty; } public int getDday() { return dday; } public void setDday(int dday) { this.dday = dday; } public String getRday() { return rday; } public void setRday(String rday) { this.rday = rday; } public int getUsein() { return usein; } public void setUsein(int usein) { this.usein = usein; } public int getUsewifi() { return usewifi; } public void setUsewifi(int usewifi) { this.usewifi = usewifi; } public int getUseseat() { return useseat; } public void setUseseat(int useseat) { this.useseat = useseat; } public int getUsenavi() { return usenavi; } public void setUsenavi(int usenavi) { this.usenavi = usenavi; } } | cs |
RentcarDAO.java (DB 연결)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 | package db; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Vector; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; public class RentcarDAO { Connection con; PreparedStatement pstmt; ResultSet rs; // 커넥션풀을 이용한 데이터베이스 연결 public void getcon() { // DB에 접속할때는 예외처리를 실시해야됨 try { Context initctx = new InitialContext(); // 외부서버로 부터 데이터를 읽어들이는것이기 때문에 드라이버가 없을수 있어 Context envctx = (Context) initctx.lookup("java:comp/env"); // 자바를 읽어들일수 있는 환경에서 사용 //예외처리를 해준다. DataSource ds = (DataSource) envctx.lookup("jdbc/pool"); con = ds.getConnection(); // 데이터소스에 username, url, password를 집어넣는다. 그렇게 하면 데이터소스가 커넥션을 얻어 온다. // jdbc/pool에 있는 데이터소스를 사용할수 있다. } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 최신순 3대의 자동차를 리턴하는 메소드 public Vector<CarListBean> getSelectCar() { // 리턴타입을 설정 Vector<CarListBean> v = new Vector<>(); getcon(); // 커넥션이 연결되어야 쿼리를 실행 가능 try { String sql = "select * from rentcar order by no desc "; pstmt = con.prepareStatement(sql); // 쿼리 실행후 실행결과 Result리턴함 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)); // 벡터에 빈 클래스를 저장 v.add(bean); count++; // 3개만 저장이 되야하기 때문.. if (count > 3) break; // 반복문을 빠져나가시오. } con.close(); } catch (Exception e) {// 내림차순으로 검색하는 쿼리문 작성 e.printStackTrace(); } return v; } // 카테고리별 자동차 리스트를 저장하는 메소드 // 벡터로 받았으니 벡터로 리턴함.. public Vector<CarListBean> getCategoryCar(int cate) { // 리턴타입이 벡터 객체이기 때문에 벡터 객체를 생성한다. Vector<CarListBean> v = new Vector<>(); // 데이터를 저장할 빈 클래스 선언 CarListBean bean = null; getcon(); try { String sql = "select * from rentcar where category=?"; pstmt = con.prepareStatement(sql); // ?에 값을 넣는다. pstmt.setInt(1, cate); // 결과를 리턴 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)); // 벡터에 빈 클래스를 저장 v.add(bean); } con.close(); } catch (Exception e) { e.printStackTrace(); } return v; } // 모든 차량을 검색하는 메소드 public Vector<CarListBean> getAllCar() { Vector<CarListBean> v = new Vector<>(); // 데이터를 저장할 빈클래스 선언 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)); // 벡터에 빈 클래스를 저장 v.add(bean); } con.close(); } catch (Exception e) { e.printStackTrace(); } return v; } // 하나의 자동차 정보를 리턴하는 메소드 public CarListBean getOneCar(int no) { // 리턴타입을 선언한다. 객체를 생성해서 그 객체에 값을 넣은후 리턴해야하기 때문 CarListBean bean = new CarListBean(); getcon(); try { String sql = "select * from rentcar where no=?"; pstmt = con.prepareStatement(sql); // 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; } // 회원 정보가 있는지를 비교한다. public int getMember(String id, String pass) { int result = 0; // 0이면 회원이 없다고 가정 getcon(); try { String sql = "select count(*) from member where id=? and pass1=?"; pstmt = con.prepareStatement(sql); // sql문에 ?표가 들어가 있으면 초기 인덱스 값을 할당해주어야 한다. pstmt.setString(1, id); pstmt.setString(2, pass); rs = pstmt.executeQuery(); if (rs.next()) { result = rs.getInt(1); // 0또는 1이 저장된다. 0이면 회원이 없는거고, 1이면 있는것 } con.close(); } catch (Exception e) { e.printStackTrace(); } return result; } // 하나의 예약 정보를 저장하는 메소드 public void setReserveCar(CarReserveBean bean) { getcon(); try { // 정보를 삽입해야하므로 INSERT를 사용하고 증가하는 값이므로 NO값은 시퀀스를 사용 String sql = "insert into carreserve values (reserve_seq.NEXTVAL,?,?,?,?,?,?,?,?,?)"; pstmt = con.prepareStatement(sql); // ? 에 값을 대입한다. pstmt.setInt(1, bean.getNo()); pstmt.setString(2, bean.getId()); pstmt.setInt(3, bean.getQty()); pstmt.setInt(4, bean.getDday()); pstmt.setString(5, bean.getRday()); pstmt.setInt(6, bean.getUsein()); pstmt.setInt(7, bean.getUsewifi()); pstmt.setInt(8, bean.getUseseat()); pstmt.setInt(9, bean.getUsenavi()); // 값을 저장만하고 반환하는게 아니기 때문에 result는 사용하지 않는다. pstmt.executeUpdate(); con.close(); } catch (Exception e) { e.printStackTrace(); } } // 회원의 예약정보를 리턴하는 메소드 public Vector<CarViewBean> getAllReserve(String id) { // 벡터에 값을 담아서 리턴해야하므로 객체 생성 Vector<CarViewBean> v = new Vector<>(); CarViewBean bean = null; getcon(); try { // 쿼리문 작성 // 두테이블을 조인해서 검색하는 조인문이다. // 렌트카 테이블과 차량예약 테이블을 조인해서 날짜에 맞는 아이디를 검색하는 sql문 String sql = "select * from rentcar natural join carreserve " + "where sysdate < to_date(rday, 'YYYY-MM-DD') and id = ?"; pstmt = con.prepareStatement(sql); // ?안에 값을 집어넣는다. pstmt.setString(1, id); // 결과 리턴, Query는 리턴을 받는다. rs = pstmt.executeQuery(); // 한사람이 여러개의 예약을 할수있기 때문에 while문을 돌린다. while (rs.next()) { bean = new CarViewBean(); // 꼭 첫번째값은 no(넘버) 값이기 때문에 2번째부터 출력한다. bean.setName(rs.getString(2)); bean.setPrice(rs.getInt(4)); bean.setImg(rs.getString(7)); bean.setQty(rs.getInt(11)); bean.setDday(rs.getInt(12)); bean.setRday(rs.getString(13)); bean.setUsein(rs.getInt(14)); bean.setUsewifi(rs.getInt(15)); bean.setUseseat(rs.getInt(16)); bean.setUsenavi(rs.getInt(17)); // 빈클래스를 벡터에 저장 v.add(bean); } con.close(); } catch (Exception e) { e.printStackTrace(); } return v; } } | cs |
'Back-End > JSP' 카테고리의 다른 글
(JSP 인강) jsp web MVC model2 programming (0) | 2019.05.21 |
---|---|
19.05.20 jsp 쇼핑몰 차량 예약 삭제 (동영상 71강) (1) | 2019.05.20 |
19.05.20 jsp 쇼핑몰 차량 구매하기 예약 및 결과 (동영상 68강) (0) | 2019.05.20 |
19.05.19 jsp 쇼핑몰 차량 날짜 처리 (동영상 67강) (0) | 2019.05.19 |
19.05.19 jsp 쇼핑몰 로그인 (동영상 66강) (0) | 2019.05.19 |