MVC w JSP (Archistruktura)
โก Inteligentne podsumowanie
MVC w JSP rozdziela zagadnienia aplikacji na warstwy modelu, widoku i kontrolera, gdzie JSP renderuje widok, serwlet peลni rolฤ kontrolera, a JavaBeany hermetyzujฤ model, co pozwala na tworzenie czystych, testowalnych i ลatwych w utrzymaniu aplikacji internetowych.

Co to jest MVC?
MVC to skrรณt od Model-View-Controller (model-widok-kontroler). Jest to wzorzec projektowania oprogramowania, ktรณry dzieli aplikacjฤ na trzy poลฤ czone ze sobฤ warstwy: logikฤ biznesowฤ , prezentacjฤ i dane. W MVC:
- M oznacza model
- V oznacza widok
- C oznacza kontroler
MVC to systematyczny sposรณb tworzenia aplikacji, w ktรณrym przepลyw rozpoczyna siฤ w warstwie widoku. ลปฤ danie jest zgลaszane przez uลผytkownika, przetwarzane w warstwie kontrolera i wysyลane do warstwy modelu w celu wstawienia lub pobrania danych. Model zwraca nastฤpnie odpowiedลบ o powodzeniu lub niepowodzeniu, ktรณrฤ widok generuje dla uลผytkownika. Diagram architektury MVC przedstawiono poniลผej:

Dlaczego warto uลผywaฤ MVC Archistruktura w JSP?
Przed skokiemping Zrozumienie dziaลania MVC w JSP pomaga zrozumieฤ, dlaczego programiลci stosujฤ ten wzorzec. Mieszanie logiki biznesowej, wywoลaล bazy danych i kodu HTML na jednej stronie JSP szybko prowadzi do nieutrzymywalnego kodu spaghetti. MVC rozwiฤ zuje ten problem, nadajฤ c kaลผdemu problemowi osobnฤ warstwฤ:
- Code staje siฤ ลatwiejsze do odczytania, poniewaลผ kaลผdy plik ma jednฤ odpowiedzialnoลฤ.
- Zespoลy mogฤ pracowaฤ rรณwnolegle nad widokiem, kontrolerem i modelem bez konfliktรณw.
- Testy jednostkowe sฤ skierowane bezpoลrednio do modelu i nie majฤ wpลywu na renderowanie JSP.
- Zamianaping Widok JSP dla odpowiedzi JSON lub innego silnika szablonรณw jest prosty.
Jak dziaลa MVC w JSP
W aplikacji MVC opartej na JSP kaลผda warstwa jest mapowana na okreลlonฤ warstwฤ Java technologia. Pliki JSP renderujฤ widok, serwlet peลni rolฤ kontrolera, a JavaModel jest hermetyzowany przez ziarna. Poniลผsze sekcje wyjaลniajฤ obowiฤ zki kaลผdej warstwy.
Warstwa modelu
- Jest to warstwa danych zawierajฤ ca logikฤ biznesowฤ systemu.
- Zawiera wszystkie dane aplikacji.
- Reprezentuje rรณwnieลผ stan aplikacji.
- Jest zbudowany z JavaFasole lub obiekty POJO, ktรณre ลฤ czฤ siฤ z baza danych.
- Kontroler komunikuje siฤ z modelem w celu pobrania danych i przekazuje je do warstwy widoku.
- Model ลฤ czy siฤ z bazฤ danych i zapisuje w niej dane.
Wyลwietl warstwฤ
- To jest warstwa prezentacyjna aplikacji.
- Skลada siฤ z HTML, JSP, CSS i JavaScenariusz.
- Zwykle przedstawia interfejs uลผytkownika aplikacji.
- Wyลwietla dane pobrane z Kontrolera, ktรณry z kolei pobiera dane z klas warstwy modelu.
- Warstwa widoku renderuje dane w interfejsie uลผytkownika aplikacji bez zawierania logiki biznesowej.
Warstwa kontrolera
- Dziaลa jako interfejs pomiฤdzy widokiem i modelem.
- Przechwytuje wszystkie ลผฤ dania przychodzฤ ce z warstwy widoku.
- Otrzymuje ลผฤ dania z warstwy widoku, przetwarza je i przeprowadza walidacjฤ ลผฤ dania.
- ลปฤ danie jest przekazywane do warstwy modelu w celu przetworzenia danych. Po przetworzeniu ลผฤ dania model odsyลa wynik do kontrolera wraz z wymaganymi informacjami, ktรณre nastฤpnie sฤ wyลwietlane w widoku.
Zalety MVC Architektura
Zalety MVC to:
- ลatwe w utrzymaniu
- ลatwe do przedลuลผenia
- ลatwy do przetestowania
- Sterowanie nawigacjฤ jest scentralizowane
- Luลบne powiฤ zanie miฤdzy warstwami zwiฤksza bezpieczeลstwo refaktoryzacji
- Moลผliwy jest rรณwnolegลy rozwรณj przez wielu czลonkรณw zespoลu
Przykลad projektowania aplikacji JSP z wykorzystaniem MVC Architektura
W tym przykลadzie pokaลผemy, jak wykorzystaฤ architekturฤ MVC w aplikacji JSP.
- Bierzemy przykลad formularza z dwiema zmiennymi: โe-mailโ i โhasลoโ, ktรณre reprezentujฤ naszฤ warstwฤ widoku.
- Gdy uลผytkownik wprowadzi adres e-mail i hasลo i kliknie Wyลlij, akcja zostanie przekazana do Mvc_servlet, gdzie zostanฤ przekazane adres e-mail i hasลo.
- Mvc_servlet to warstwa kontrolera. W Mvc_servlet ลผฤ danie jest wysyลane do obiektu bean, ktรณry peลni rolฤ warstwy modelu.
- Wartoลci adresu e-mail i hasลa sฤ wpisywane do ziarna i przechowywane do przyszลego uลผytku.
- Wartoลฤ jest pobierana z ziarna i wyลwietlana w warstwie widoku.
Mvc_example.jsp (Widok)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>MVC Guru Example</title> </head> <body> <form action="Mvc_servlet" method="POST"> Email: <input type="text" name="email"> <br /> Password: <input type="text" name="password" /> <input type="submit" value="Submit" /> </form> </body> </html>
Wyjaลnienie kodu:
Zobacz warstwฤ:
Code Linia 10-15: Tutaj bierzemy formularz, ktรณry ma dwa pola jako parametry: โemailโ i โhasลoโ, a to ลผฤ danie musi zostaฤ przekazane do kontrolera Mvc_servlet.java, ktรณry jest przekazywany w atrybucie akcji. Metodฤ HTTP, za pomocฤ ktรณrej jest ono przekazywane, jest POST.
Mvc_servlet.java (Kontroler)
package demotest; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Mvc_servlet */ public class Mvc_servlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Mvc_servlet() { super(); // TODO Auto-generated constructor stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String email=request.getParameter("email"); String password=request.getParameter("password"); TestBean testobj = new TestBean(); testobj.setEmail(email); testobj.setPassword(password); request.setAttribute("gurubean",testobj); RequestDispatcher rd=request.getRequestDispatcher("mvc_success.jsp"); rd.forward(request, response); } }
Wyjaลnienie kodu:
Warstwa kontrolera:
Code Linia 14: Mvc_servlet rozszerza HttpServlet.
Code Linia 26: Poniewaลผ uลผytฤ metodฤ jest POST, ลผฤ danie trafia do metody doPost serwletu, ktรณry przetwarza ลผฤ danie i zapisuje je w obiekcie bean jako testobj.
Code Linia 34: Uลผywajฤ c obiektu ลผฤ dania, ustawiamy atrybut โgurubeanโ, ktรณremu przypisujemy wartoลฤ testobj.
Code Linia 35: Tutaj uลผyliลmy obiektu RequestDispatcher do przekazania komunikatu o powodzeniu do pliku mvc_success.jsp.
TestBean.java (model)
package demotest; import java.io.Serializable; public class TestBean implements Serializable{ public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String email="null"; private String password="null"; }
Wyjaลnienie kodu:
Warstwa modelu:
Code Linia 7-17: Zawiera metody pobierajฤ ce i ustawiajฤ ce adres e-mail i hasลo, ktรณre sฤ czลonkami klasy TestBean.
Code Linia 19-20: Definiuje adres e-mail i hasลo czลonka typu String w klasie bean.
Mvc_success.jsp (Widok wynikรณw)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="demotest.TestBean"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Success</title> </head> <body> <% TestBean testguru=(TestBean)request.getAttribute("gurubean"); out.print("Welcome, "+testguru.getEmail()); %> </body> </html>
Wyjaลnienie kodu:
Code Linia 12: Pobieramy atrybut przy uลผyciu obiektu ลผฤ dania ustawionego w metodzie doPost serwletu.
Code Linia 13: Drukujemy wiadomoลฤ powitalnฤ i identyfikator e-mail, ktรณry zostaล zapisany w obiekcie bean.
Wydajnoลฤ
Po wykonaniu powyลผszego kodu otrzymasz nastฤpujฤ cy wynik:
Po otwarciu pliku mvc_example.jsp pojawi siฤ formularz z polami adresu e-mail i hasลa oraz przyciskiem Wyลlij.
Po wpisaniu adresu e-mail i hasลa do formularza i klikniฤciu przycisku Przeลlij:
Po klikniฤciu przycisku Wyลlij wynik jest wyลwietlany poniลผej:
Po wpisaniu adresu e-mail i hasลa na ekranie i klikniฤciu โPrzeลlijโ dane zostanฤ zapisane w TestBean. Z TestBean zostanฤ one pobrane na nastฤpnym ekranie, aby wyลwietliฤ komunikat o pomyลlnym zakoลczeniu. JSP peลni rolฤ prezentowania danych i zapewniania widoku, podczas gdy serwlet dziaลa jako kontroler i JavaBean sลuลผy jako model. Gลรณwna logika biznesowa znajduje siฤ w warstwie modelu.


