목차
Servlet을 사용하여 MVC 패턴으로 구현하는 방법을 설명드리겠습니다. MVC 패턴에서는 서블릿(Servlet)이 컨트롤러(Controller) 역할을 하며, JSP는 뷰(View) 역할을 담당합니다. DAO(Data Access Object)는 모델(Model) 역할을 하며, 데이터베이스와의 상호작용을 처리합니다.
1. DAO 인터페이스 정의
public interface BookingDAO {
void insertBooking(long guestId, long roomId, Date checkInDate, Date checkOutDate);
}
2. DAO 구현 클래스(RoomBookingDAOImpl.java)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;
public class BookingDAOImpl implements BookingDAO {
private static final String jdbcURL = "jdbc:mysql://localhost:3306/db_name";
private static final String jdbcUsername = "username";
private static final String jdbcPassword = "password";
@Override
public void insertBooking(long guestId, long roomId, Date checkInDate, Date checkOutDate) {
String sql = "INSERT INTO booking (guest_id, room_id, check_in_date, check_out_date, booking_status) VALUES (?, ?, ?, ?, 1)";
try (Connection conn = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setLong(1, guestId);
pstmt.setLong(2, roomId);
pstmt.setDate(3, checkInDate);
pstmt.setDate(4, checkOutDate);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3. Servlet(Controller) - RoomBookingServlet.java
@WebServlet("/bookRoom")
public class RoomBookingServlet extends HttpServlet {
private BookingDAO bookingDAO;
@Override
public void init() throws ServletException {
super.init();
bookingDAO = new BookingDAOImpl(); // DAO 인스턴스 생성
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 세션에서 현재 로그인한 사용자의 정보 가져오기
UserVO user = (UserVO) request.getSession().getAttribute("user");
if (user != null) {
// 로그인된 사용자의 아이디 가져오기
long guestId = Long.parseLong(user.getId());
// 선택한 방의 ID 가져오기
long roomId = Long.parseLong(request.getParameter("roomId"));
// 체크인 날짜와 체크아웃 날짜 가져오기
Date checkInDate = Date.valueOf(request.getParameter("checkInDate"));
Date checkOutDate = Date.valueOf(request.getParameter("checkOutDate"));
// 예약 정보를 데이터베이스에 저장
bookingDAO.insertBooking(guestId, roomId, checkInDate, checkOutDate);
// 예약된 방 정보 가져오기 (예시)
Room bookedRoom = bookingDAO.getBookedRoom(roomId); // 예약된 방 정보를 DB에서 가져오는 예시 메서드
// 예약이 성공적으로 저장되었다면 bookingSuccess.jsp로 포워드
request.setAttribute("bookedRoom", bookedRoom);
RequestDispatcher dispatcher = request.getRequestDispatcher("/bookingSuccess.jsp");
dispatcher.forward(request, response);
} else {
// 사용자 정보가 없을 경우에 대한 처리 (예: 로그인 페이지로 리다이렉트)
response.sendRedirect(request.getContextPath() + "/login.jsp");
}
}
}
4. JSP(View) - bookRoom.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Book Room</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/bookRoom" method="post">
<label for="roomId">Room ID:</label>
<input type="text" id="roomId" name="roomId" required><br><br>
<label for="checkInDate">Check-in Date:</label>
<input type="date" id="checkInDate" name="checkInDate" required><br><br>
<label for="checkOutDate">Check-out Date:</label>
<input type="date" id="checkOutDate" name="checkOutDate" required><br><br>
<input type="submit" value="Book Room">
</form>
</body>
</html>
설명:
- BookingDAO 인터페이스: 예약 관련 데이터베이스 작업을 추상화한 인터페이스입니다.
- BookingDAOImpl 클래스: BookingDAO 인터페이스를 구현한 DAO 클래스로, 실제 데이터베이스 작업을 수행합니다.
- RoomBookingServlet 클래스: 사용자의 예약 요청을 처리하는 서블릿입니다. 사용자로부터 방 ID와 날짜를 받아 DAO를 통해 예약 정보를 데이터베이스에 삽입합니다.
- bookRoom.jsp: 사용자가 방을 예약하는 폼을 제공하는 JSP 페이지입니다. 사용자는 방 ID와 체크인/체크아웃 날짜를 입력하고 제출할 수 있습니다.
이 예제는 간단히 설명을 위해 DAO, 서블릿, JSP를 분리하여 MVC 패턴을 적용한 것입니다. 각 클래스와 페이지에서 사용하는 데이터베이스 연결 설정(jdbcURL, jdbcUsername, jdbcPassword)은 실제 환경에 맞게 수정해야 합니다.
'세미 프로젝트' 카테고리의 다른 글
[Java/Servlet] MVC 기반으로 방 계약 구현 (0) | 2024.07.29 |
---|---|
[Java/Servlet] Dao와 DaoImpl (0) | 2024.07.28 |
[Java/Servlet] MVC 디자인 패턴: Model-View-Controller의 역할과 상호작용 + 방 리스트 조회 및 페이징 처리에 적용해보기 (0) | 2024.07.27 |
지도 API(Kakao Maps API)가져와서 웹에 띄우기 (0) | 2024.07.12 |
Servlet을 사용하여 MVC 패턴으로 구현하는 방법을 설명드리겠습니다. MVC 패턴에서는 서블릿(Servlet)이 컨트롤러(Controller) 역할을 하며, JSP는 뷰(View) 역할을 담당합니다. DAO(Data Access Object)는 모델(Model) 역할을 하며, 데이터베이스와의 상호작용을 처리합니다.
1. DAO 인터페이스 정의
public interface BookingDAO { void insertBooking(long guestId, long roomId, Date checkInDate, Date checkOutDate); }
2. DAO 구현 클래스(RoomBookingDAOImpl.java)
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Date; public class BookingDAOImpl implements BookingDAO { private static final String jdbcURL = "jdbc:mysql://localhost:3306/db_name"; private static final String jdbcUsername = "username"; private static final String jdbcPassword = "password"; @Override public void insertBooking(long guestId, long roomId, Date checkInDate, Date checkOutDate) { String sql = "INSERT INTO booking (guest_id, room_id, check_in_date, check_out_date, booking_status) VALUES (?, ?, ?, ?, 1)"; try (Connection conn = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setLong(1, guestId); pstmt.setLong(2, roomId); pstmt.setDate(3, checkInDate); pstmt.setDate(4, checkOutDate); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } }
3. Servlet(Controller) - RoomBookingServlet.java
@WebServlet("/bookRoom") public class RoomBookingServlet extends HttpServlet { private BookingDAO bookingDAO; @Override public void init() throws ServletException { super.init(); bookingDAO = new BookingDAOImpl(); // DAO 인스턴스 생성 } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 세션에서 현재 로그인한 사용자의 정보 가져오기 UserVO user = (UserVO) request.getSession().getAttribute("user"); if (user != null) { // 로그인된 사용자의 아이디 가져오기 long guestId = Long.parseLong(user.getId()); // 선택한 방의 ID 가져오기 long roomId = Long.parseLong(request.getParameter("roomId")); // 체크인 날짜와 체크아웃 날짜 가져오기 Date checkInDate = Date.valueOf(request.getParameter("checkInDate")); Date checkOutDate = Date.valueOf(request.getParameter("checkOutDate")); // 예약 정보를 데이터베이스에 저장 bookingDAO.insertBooking(guestId, roomId, checkInDate, checkOutDate); // 예약된 방 정보 가져오기 (예시) Room bookedRoom = bookingDAO.getBookedRoom(roomId); // 예약된 방 정보를 DB에서 가져오는 예시 메서드 // 예약이 성공적으로 저장되었다면 bookingSuccess.jsp로 포워드 request.setAttribute("bookedRoom", bookedRoom); RequestDispatcher dispatcher = request.getRequestDispatcher("/bookingSuccess.jsp"); dispatcher.forward(request, response); } else { // 사용자 정보가 없을 경우에 대한 처리 (예: 로그인 페이지로 리다이렉트) response.sendRedirect(request.getContextPath() + "/login.jsp"); } } }
4. JSP(View) - bookRoom.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Book Room</title> </head> <body> <form action="<%=request.getContextPath()%>/bookRoom" method="post"> <label for="roomId">Room ID:</label> <input type="text" id="roomId" name="roomId" required><br><br> <label for="checkInDate">Check-in Date:</label> <input type="date" id="checkInDate" name="checkInDate" required><br><br> <label for="checkOutDate">Check-out Date:</label> <input type="date" id="checkOutDate" name="checkOutDate" required><br><br> <input type="submit" value="Book Room"> </form> </body> </html>
설명:
- BookingDAO 인터페이스: 예약 관련 데이터베이스 작업을 추상화한 인터페이스입니다.
- BookingDAOImpl 클래스: BookingDAO 인터페이스를 구현한 DAO 클래스로, 실제 데이터베이스 작업을 수행합니다.
- RoomBookingServlet 클래스: 사용자의 예약 요청을 처리하는 서블릿입니다. 사용자로부터 방 ID와 날짜를 받아 DAO를 통해 예약 정보를 데이터베이스에 삽입합니다.
- bookRoom.jsp: 사용자가 방을 예약하는 폼을 제공하는 JSP 페이지입니다. 사용자는 방 ID와 체크인/체크아웃 날짜를 입력하고 제출할 수 있습니다.
이 예제는 간단히 설명을 위해 DAO, 서블릿, JSP를 분리하여 MVC 패턴을 적용한 것입니다. 각 클래스와 페이지에서 사용하는 데이터베이스 연결 설정(jdbcURL, jdbcUsername, jdbcPassword)은 실제 환경에 맞게 수정해야 합니다.
'세미 프로젝트' 카테고리의 다른 글
[Java/Servlet] MVC 기반으로 방 계약 구현 (0) | 2024.07.29 |
---|---|
[Java/Servlet] Dao와 DaoImpl (0) | 2024.07.28 |
[Java/Servlet] MVC 디자인 패턴: Model-View-Controller의 역할과 상호작용 + 방 리스트 조회 및 페이징 처리에 적용해보기 (0) | 2024.07.27 |
지도 API(Kakao Maps API)가져와서 웹에 띄우기 (0) | 2024.07.12 |