דוגמה ל- MVC עם Servlets ו- JSP

1. סקירה כללית

במאמר מהיר זה, ניצור אפליקציית אינטרנט קטנה המיישמת את תבנית העיצוב Model View Controller (MVC), באמצעות Servlets ו- JSP בסיסיים.

נבדוק מעט כיצד פועל MVC ותכונות המפתח שלו לפני שנמשיך ליישום.

2. מבוא ל- MVC

Model-View-Controller (MVC) הוא תבנית המשמשת בהנדסת תוכנה להפרדת לוגיקת היישום מממשק המשתמש. כפי שהשם מרמז, לתבנית ה- MVC יש שלוש שכבות.

המודל מגדיר את הרובד העסקי של היישום, הבקר מנהל את זרימת היישום והתצוגה מגדירה את שכבת המצגת של היישום.

למרות שתבנית ה- MVC אינה ספציפית ליישומי אינטרנט, היא מתאימה מאוד ליישומים מסוג זה. בהקשר Java, המודל מורכב משיעורי Java פשוטים, הבקר מורכב מ- servlets וה- View מורכב מדפי JSP.

להלן מספר תכונות עיקריות של התבנית:

  • הוא מפריד בין שכבת המצגת לשכבה העסקית
  • הבקר מבצע את הפעולה של הפעלת המודל ושליחת הנתונים לתצוגה
  • המודל אפילו לא מודע לכך שהוא משמש יישום אינטרנט כלשהו או יישום שולחן עבודה

בואו נסתכל על כל שכבה.

2.1. שכבת הדגם

זוהי שכבת הנתונים המכילה לוגיקה עסקית של המערכת, ומייצגת גם את מצב היישום.

זה בלתי תלוי בשכבת המצגת, הבקר מביא את הנתונים משכבת ​​הדגם ושולח אותם לשכבת View.

2.2. שכבת הבקר

שכבת הבקר משמשת כממשק בין תצוגה למודל. הוא מקבל בקשות משכבת ​​View ומעבד אותן, כולל האימות הדרוש.

הבקשות נשלחות עוד לשכבת Model לעיבוד נתונים, וברגע שהן עובדות, הנתונים נשלחים חזרה לבקר ואז מוצגים בתצוגה.

2.3. שכבת הנוף

שכבה זו מייצגת את פלט היישום, בדרך כלל צורת ממשק משתמש כלשהי. שכבת המצגת משמשת להצגת נתוני המודל שנאספו על ידי הבקר.

3. MVC עם Servlets ו- JSP

כדי ליישם יישום אינטרנט המבוסס על דפוס עיצוב MVC, ניצור את ה- סטוּדֶנט ו StudentService שיעורים - שישמשו כשכבת המודל שלנו.

סtudentServlet מחלקה תפעל כבקר, ועל שכבת המצגת ניצור סטודנט-שיא.jsp עמוד.

עכשיו, בואו נכתוב את השכבות האלה אחת אחת ונתחיל איתה סטוּדֶנט מעמד:

סטודנט בכיתה ציבורית {id int private; פרטי מחרוזת firstName; שם משפחה פרטי מחרוזת; // בונים, גטרים וקובעים הולכים לכאן} 

בואו עכשיו נכתוב את שלנו StudentService שיעבד את ההיגיון העסקי שלנו:

מחלקה ציבורית StudentService {public Optional getStudent (int id) {switch (id) {case 1: return Optional.of (סטודנט חדש (1, "John", "Doe")); מקרה 2: החזרה Optional.of (סטודנט חדש (2, "ג'יין", "גודול")); מקרה 3: החזרה Optional.of (סטודנט חדש (3, "מקס", "נולד")); ברירת מחדל: להחזיר Optional.empty (); }}}

עכשיו בואו ניצור את מחלקת הבקר שלנו StudentServlet:

@WebServlet (name = "StudentServlet", urlPatterns = "/ student-record") מחלקה ציבורית StudentServlet מרחיב את HttpServlet {studentService הפרטי studentService = StudentService חדש (); תהליך ריק ריק (בקשה HttpServletRequest, תגובה HttpServletResponse) זורק ServletException, IOException {מחרוזת studentID = request.getParameter ("id"); אם (studentID! = null) {int id = Integer.parseInt (studentID); studentService.getStudent (id) .ifPresent (s -> request.setAttribute ("studentRecord", s)); } משדר RequestDispatcher = request.getRequestDispatcher ("/WEB-INF/jsp/student-record.jsp"); dispatcher.forward (בקשה, תגובה); } @Override מוגן בטל doGet (HttpServletRequest בקשה, HttpServletResponse תגובה) זורק ServletException, IOException {processRequest (בקשה, תגובה); } @Override מוגן ריק doPost (בקשת HttpServletRequest, תגובה HttpServletResponse) זורק ServletException, IOException {processRequest (בקשה, תגובה); }}

סרוולט זה הוא הבקר של יישום האינטרנט שלנו.

ראשית, זה קורא פרמטר תְעוּדַת זֶהוּת מהבקשה. אם ה תְעוּדַת זֶהוּת מוגש, א סטוּדֶנט האובייקט נלקח מהשכבה העסקית.

ברגע שהוא מאחזר את הנתונים הדרושים מהמודל, הוא מכניס נתונים אלה לבקשה באמצעות ה- setAttribute () שיטה.

לבסוף, הבקר קדימה הבקשה והתגובה מתנגדות ל- JSP, תצוגת היישום.

לאחר מכן, בואו נכתוב את שכבת המצגת שלנו סטודנט-שיא.jsp:

  תעודת תעודת סטודנט: שם פרטי: שם משפחה: 

וכמובן, ה- JSP הוא השקפת היישום; הוא מקבל את כל המידע שהוא צריך מהבקר, הוא לא צריך לתקשר ישירות עם השכבה העסקית.

4. מסקנה

במדריך זה למדנו על ה- MVC כלומר ארכיטקטורת הבקר של Model View, והתמקדנו כיצד ליישם דוגמה פשוטה.

כרגיל, את הקוד המוצג כאן ניתן למצוא ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found