1. 개요
이 빠른 기사에서는 기본 서블릿 및 JSP를 사용하여 MVC(Model View Controller) 디자인 패턴을 구현하는 작은 웹 애플리케이션을 만듭니다.
구현으로 이동하기 전에 MVC의 작동 방식과 주요 기능에 대해 조금 살펴보겠습니다.
2. MVC 소개
MVC(Model-View-Controller)는 사용자 인터페이스에서 응용 프로그램 논리를 분리하기 위해 소프트웨어 엔지니어링에서 사용되는 패턴입니다. 이름에서 알 수 있듯이 MVC 패턴에는 세 개의 레이어가 있습니다.
Model은 애플리케이션의 비즈니스 계층을 정의하고 Controller는 애플리케이션의 흐름을 관리하며 View는 애플리케이션의 프레젠테이션 계층을 정의합니다.
MVC 패턴은 웹 애플리케이션에만 국한되지는 않지만 이러한 유형의 애플리케이션에 매우 적합합니다. Java 컨텍스트에서 모델은 간단한 Java 클래스로 구성되고 컨트롤러는 서블릿으로 구성되며 보기는 JSP 페이지로 구성됩니다.
패턴의 몇 가지 주요 기능은 다음과 같습니다.
- 프레젠테이션 계층과 비즈니스 계층을 분리합니다.
- Controller는 Model을 호출하고 View에 데이터를 보내는 작업을 수행합니다.
- 모델은 일부 웹 애플리케이션 또는 데스크톱 애플리케이션에서 사용된다는 사실조차 인식하지 못합니다.
각 레이어를 살펴보겠습니다.
2.1. 모델 계층
이것은 시스템의 비즈니스 로직을 포함하고 애플리케이션의 상태를 나타내는 데이터 계층입니다.
프리젠테이션 레이어와 독립적이며 컨트롤러는 모델 레이어에서 데이터를 가져와서 뷰 레이어로 보냅니다.
2.2. 컨트롤러 계층
컨트롤러 계층은 View와 Model 간의 인터페이스 역할을 합니다. View 계층에서 요청을 수신하고 필요한 유효성 검사를 포함하여 요청을 처리합니다.
요청은 데이터 처리를 위해 모델 계층으로 추가로 전송되고 처리되면 데이터가 컨트롤러로 다시 전송된 다음 보기에 표시됩니다.
2.3. 뷰 레이어
이 계층은 애플리케이션의 출력, 일반적으로 UI 형식을 나타냅니다. 프레젠테이션 계층은 컨트롤러가 가져온 모델 데이터를 표시하는 데 사용됩니다.
3. 서블릿과 JSP가 있는 MVC
MVC 디자인 패턴을 기반으로 웹 애플리케이션을 구현하기 위해 모델 계층 역할을 할 Student 및 StudentService 클래스를 만듭니다.
StudentServlet 클래스는 컨트롤러 역할을 하고 프레젠테이션 계층을 위해 student-record.jsp 페이지를 생성합니다.
이제 이러한 레이어를 하나씩 작성하고 Student 클래스부터 시작하겠습니다.
public class Student {
private int id;
private String firstName;
private String lastName;
// constructors, getters and setters goes here
}
이제 비즈니스 로직을 처리할 StudentService 를 작성해 보겠습니다.
public class StudentService {
public Optional<Student> getStudent(int id) {
switch (id) {
case 1:
return Optional.of(new Student(1, "John", "Doe"));
case 2:
return Optional.of(new Student(2, "Jane", "Goodall"));
case 3:
return Optional.of(new Student(3, "Max", "Born"));
default:
return Optional.empty();
}
}
}
이제 컨트롤러 클래스 StudentServlet 을 생성해 보겠습니다 .
@WebServlet(
name = "StudentServlet",
urlPatterns = "/student-record")
public class StudentServlet extends HttpServlet {
private StudentService studentService = new StudentService();
private void processRequest(
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String studentID = request.getParameter("id");
if (studentID != null) {
int id = Integer.parseInt(studentID);
studentService.getStudent(id)
.ifPresent(s -> request.setAttribute("studentRecord", s));
}
RequestDispatcher dispatcher = request.getRequestDispatcher(
"/WEB-INF/jsp/student-record.jsp");
dispatcher.forward(request, response);
}
@Override
protected void doGet(
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
이 서블릿은 웹 애플리케이션의 컨트롤러입니다.
먼저 요청에서 매개변수 ID 를 읽습니다 . ID 가 제출되면 비즈니스 계층에서 Student 개체를 가져옵니다.
모델에서 필요한 데이터를 검색하면 setAttribute() 메서드를 사용하여 이 데이터를 요청에 넣습니다.
마지막으로 컨트롤러 는 요청 및 응답 개체를 애플리케이션의 보기인 JSP로 전달 합니다.
다음으로 프레젠테이션 레이어 student-record.jsp를 작성해 보겠습니다 .
<html>
<head>
<title>Student Record</title>
</head>
<body>
<%
if (request.getAttribute("studentRecord") != null) {
Student student = (Student) request.getAttribute("studentRecord");
%>
<h1>Student Record</h1>
<div>ID: <%= student.getId()%></div>
<div>First Name: <%= student.getFirstName()%></div>
<div>Last Name: <%= student.getLastName()%></div>
<%
} else {
%>
<h1>No student record found.</h1>
<% } %>
</body>
</html>
물론 JSP는 애플리케이션의 관점입니다. 컨트롤러에서 필요한 모든 정보를 수신하므로 비즈니스 계층과 직접 상호 작용할 필요가 없습니다.
4. 결론
이 예제에서는 MVC 즉, Model View Controller 아키텍처에 대해 배웠으며 간단한 예제를 구현하는 방법에 중점을 두었습니다.
늘 그렇듯이 여기에 제시된 코드는 GitHub 에서 찾을 수 있습니다 .