모델2 패턴에서 DTO, DAO, Controller, View로 나눠서 설명합니다.
모델 : dao, dto
DAO는 데이터베이스와 연동하여 데이터를 읽고 쓰는 역할을 수행하는 객체를 의미하며,
DTO는 데이터를 전달하기 위한 객체를 의미합니다.
이 둘은 모델에서 데이터를 처리하고 저장하는 역할을 담당합니다.
뷰 : view.jsp
사용자에게 데이터를 표시하는 역할을 합니다. View는 모델로부터 전달받은 데이터를 사용하여
사용자가 볼 수 있는 형태로 출력하거나, 사용자의 입력을 받아 컨트롤러에 전달합니다.
컨트롤러 : controller
사용자의 요청을 받아 해당 요청에 대한 처리를 수행하는 역할을 합니다.
Controller는 요청을 받아 모델을 호출하여 데이터를 처리하고, 그 결과를 다시 뷰(View)에 전달합니다.
1. dto클래스
public class UserDTO {
private int id;
private String name;
private String email;
private int age;
// Getter, Setter
}
- 데이터를 저장하고 관리하는 클래스인 모델의 예시입니다.
- 사용자 정보를 저장하는 id, name, email, age 필드와 이를 다루기 위한 Getter/Setter 메서드를 가지고 있습니다.
2. dao클래스
public class UserDAO {
public UserDTO getUserById(int id) {
// id를 이용하여 데이터베이스에서 사용자 정보를 가져와 UserDTO 객체를 생성하여 반환
}
public void addUser(UserDTO user) {
// UserDTO 객체를 이용하여 데이터베이스에 사용자 정보를 추가
}
public void updateUser(UserDTO user) {
// UserDTO 객체를 이용하여 데이터베이스에 사용자 정보를 업데이트
}
public void deleteUser(int id) {
// id를 이용하여 데이터베이스에서 해당 사용자 정보를 삭제
}
}
- 데이터베이스와 연동하여 데이터를 조회하거나 수정하는 클래스인 DAO의 예시입니다.
- JDBC를 사용하여 데이터베이스에 접근하고, User 모델 객체를 데이터베이스에 저장하거나 조회하는 메서드를 가지고 있습니다.
3. Controller ( Servlet 사용)
@WebServlet("/user/*")
public class UserController extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uri = request.getRequestURI();
String contextPath = request.getContextPath();
String command = uri.substring(contextPath.length());
if (command.equals("/user/view")) {
int id = Integer.parseInt(request.getParameter("id"));
UserDAO dao = new UserDAO();
UserDTO user = dao.getUserById(id);
request.setAttribute("user", user);
RequestDispatcher rd = request.getRequestDispatcher("/user/view.jsp");
rd.forward(request, response);
} else if (command.equals("/user/form")) {
RequestDispatcher rd = request.getRequestDispatcher("/user/form.jsp");
rd.forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uri = request.getRequestURI();
String contextPath = request.getContextPath();
String command = uri.substring(contextPath.length());
if (command.equals("/user/add")) {
String name = request.getParameter("name");
String email = request.getParameter("email");
int age = Integer.parseInt(request.getParameter("age"));
UserDTO user = new UserDTO();
user.setName(name);
user.setEmail(email);
user.setAge(age);
UserDAO dao = new UserDAO();
dao.addUser(user);
response.sendRedirect(request.getContextPath() + "/user/list");
} else if (command.equals("/user/update")) {
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String email = request.getParameter("email");
int age = Integer.parseInt(request.getParameter("age"));
UserDTO user = new UserDTO();
user.setId(id);
user.setName(name);
user.setEmail(email);
user.setAge(age);
UserDAO dao = new UserDAO();
dao.updateUser(user);
response.sendRedirect(request.getContextPath() + "/user/list");
} else if (command.equals("/user/delete")) {
int id = Integer.parseInt(request.getParameter("id"));
UserDAO dao = new UserDAO();
dao.deleteUser(id);
response.sendRedirect(request.getContextPath() + "/user/list");
}
}
}
- 모델과 뷰를 연결하여 사용자의 요청을 처리하고 응답을 생성하는 클래스인 컨트롤러의 예시입니다.
- 사용자의 요청을 분석하고, 요청에 필요한 데이터를 모델에게 전달하여 처리한 결과를 뷰에게 전달합니다.
4. view (view.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>User Information</title>
</head>
<body>
<h1>User Information</h1>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
<th>Age</th>
</tr>
<c:forEach var="user" items="${userList}">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.email}</td>
<td>${user.age}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
- 사용자에게 결과를 보여주는 인터페이스인 뷰의 예시입니다.
- HTML과 JSP 태그를 사용하여 사용자 정보를 출력하는 코드입니다. 사용자의 요청에 따라 컨트롤러에서 전달받은 모델의 데이터를 출력합니다.
* c:forEach 태그: userList 속성에 저장된 사용자 정보를 반복해서 출력합니다.
'스프링 > mvc패턴' 카테고리의 다른 글
[spring] 스프링 입문1. Controller->view 와 view->Controller (0) | 2023.02.20 |
---|---|
mvc패턴)모델1의 흐름(순서) (0) | 2023.02.17 |
mvc패턴) 일정관리 (0) | 2023.02.16 |
mvc패턴) model1에서 model2로 변경, dao와 controller의 기능 (0) | 2023.02.16 |
[MVC패턴] MVC패턴, model1/model2의 개념, cookie, 답글 달기 (0) | 2023.02.10 |
댓글