ตัวอย่าง MVC พร้อมด้วย Servlets และ JSP

1. ภาพรวม

ในบทความสั้น ๆ นี้เราจะสร้างเว็บแอปพลิเคชันขนาดเล็กที่ใช้รูปแบบการออกแบบ Model View Controller (MVC) โดยใช้ Servlets และ JSP พื้นฐาน

เราจะสำรวจเล็กน้อยเกี่ยวกับวิธีการทำงานของ MVC และคุณสมบัติที่สำคัญก่อนที่เราจะดำเนินการต่อไป

2. ข้อมูลเบื้องต้นเกี่ยวกับ MVC

Model-View-Controller (MVC) เป็นรูปแบบที่ใช้ในวิศวกรรมซอฟต์แวร์เพื่อแยกตรรกะของแอปพลิเคชันออกจากส่วนติดต่อผู้ใช้ ตามชื่อโดยนัยรูปแบบ MVC มีสามชั้น

Model กำหนดชั้นธุรกิจของแอปพลิเคชันคอนโทรลเลอร์จะจัดการขั้นตอนของแอปพลิเคชันและ View จะกำหนดเลเยอร์การนำเสนอของแอปพลิเคชัน

แม้ว่ารูปแบบ MVC จะไม่เฉพาะเจาะจงสำหรับเว็บแอปพลิเคชัน แต่ก็เข้ากันได้ดีกับแอปพลิเคชันประเภทนี้ ในบริบท Java โมเดลประกอบด้วยคลาส Java แบบง่ายคอนโทรลเลอร์ประกอบด้วย servlets และ View ประกอบด้วยเพจ JSP

นี่คือคุณสมบัติหลักบางประการของรูปแบบ:

  • แยกชั้นการนำเสนอออกจากชั้นธุรกิจ
  • ตัวควบคุมดำเนินการเรียกใช้ Model และส่งข้อมูลไปยัง View
  • โมเดลไม่ทราบด้วยซ้ำว่ามีการใช้งานโดยเว็บแอปพลิเคชันหรือแอปพลิเคชันบนเดสก์ท็อป

มาดูแต่ละชั้นกัน

2.1. เลเยอร์โมเดล

นี่คือชั้นข้อมูลที่มีตรรกะทางธุรกิจของระบบและยังแสดงสถานะของแอปพลิเคชัน

ไม่ขึ้นกับเลเยอร์การนำเสนอคอนโทรลเลอร์จะดึงข้อมูลจากเลเยอร์โมเดลและส่งไปยังเลเยอร์ดู

2.2. เลเยอร์คอนโทรลเลอร์

เลเยอร์คอนโทรลเลอร์ทำหน้าที่เป็นส่วนต่อประสานระหว่าง View และ Model ได้รับคำขอจากเลเยอร์ View และประมวลผลรวมถึงการตรวจสอบความถูกต้องที่จำเป็น

คำขอจะถูกส่งต่อไปยังเลเยอร์โมเดลสำหรับการประมวลผลข้อมูลและเมื่อได้รับการประมวลผลข้อมูลจะถูกส่งกลับไปยังคอนโทรลเลอร์จากนั้นแสดงบน View

2.3. เลเยอร์มุมมอง

เลเยอร์นี้แสดงผลลัพธ์ของแอปพลิเคชันโดยปกติจะเป็น UI บางรูปแบบ เลเยอร์การนำเสนอใช้เพื่อแสดงข้อมูลโมเดลที่เรียกโดยคอนโทรลเลอร์

3. MVC พร้อม Servlets และ JSP

ในการใช้งานเว็บแอปพลิเคชันตามรูปแบบการออกแบบ MVC เราจะสร้างชั้นเรียนStudentและStudentServiceซึ่งจะทำหน้าที่เป็นเลเยอร์โมเดลของเรา

S tudentServletชั้นจะทำหน้าที่เป็นตัวควบคุมและสำหรับชั้นนำเสนอเราจะสร้างนักเรียน record.jspหน้า

ตอนนี้เรามาเขียนเลเยอร์เหล่านี้ทีละชั้นและเริ่มต้นด้วยชั้นนักเรียน :

public class Student { private int id; private String firstName; private String lastName; // constructors, getters and setters goes here } 

ตอนนี้เรามาเขียนStudentServiceของเราซึ่งจะประมวลผลตรรกะทางธุรกิจของเรา:

public class StudentService { public Optional 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(); } } }

ตอนนี้มาสร้างคลาส Controller 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); } }

servlet นี้เป็นตัวควบคุมเว็บแอปพลิเคชันของเรา

ขั้นแรกจะอ่านรหัสพารามิเตอร์จากคำขอ หากส่งรหัสแล้ววัตถุนักเรียนจะถูกดึงมาจากชั้นธุรกิจ

เมื่อดึงข้อมูลที่จำเป็นจาก Model แล้วจะใส่ข้อมูลนี้ในคำขอโดยใช้เมธอดsetAttribute ()

ในที่สุดคอนโทรลเลอร์จะส่งต่อคำร้องขอและอ็อบเจ็กต์ตอบกลับไปยัง JSP ซึ่งเป็นมุมมองของแอ็พพลิเคชัน

ต่อไปมาเขียนเลเยอร์การนำเสนอstudent-record.jsp :

  Student Record ID: First Name: Last Name: 

และแน่นอน JSP คือมุมมองของแอปพลิเคชัน ได้รับข้อมูลทั้งหมดที่ต้องการจาก Controller โดยไม่จำเป็นต้องโต้ตอบกับชั้นธุรกิจโดยตรง

4. สรุป

ในบทช่วยสอนนี้เราได้เรียนรู้เกี่ยวกับสถาปัตยกรรม MVC เช่น Model View Controller และเราจะเน้นไปที่วิธีการใช้งานตัวอย่างง่ายๆ

ตามปกติรหัสที่นำเสนอนี้สามารถพบได้บน GitHub