MVC v JSP (Architecture)
โก Chytrรฉ shrnutรญ
MVC v JSP rozdฤluje aplikaฤnรญ zรกleลพitosti na vrstvy Model, View a Controller, kde JSP vykresluje View, Servlet funguje jako Controller a JavaBeany zapouzdลujรญ model pro ฤistรฉ, testovatelnรฉ a udrลพovatelnรฉ webovรฉ aplikace.

Co je MVC?
MVC je zkratka pro Model-View-Controller. Jednรก se o softwarovรฝ nรกvrhovรฝ vzor, โโkterรฝ rozdฤluje aplikaci do tลรญ vzรกjemnฤ propojenรฝch vrstev: obchodnรญ logiky, prezentace a dat. V MVC:
- M zkratka pro Model
- V zkratka pro View
- C zkratka pro Controller
MVC je systematickรฝ zpลฏsob tvorby aplikacรญ, kde proces zaฤรญnรก na vrstvฤ View. Poลพadavek je vyvolรกn uลพivatelem, zpracovรกn ve vrstvฤ Controller a odeslรกn do vrstvy Model pro vloลพenรญ nebo naฤtenรญ dat. Model potรฉ vrรกtรญ odpovฤฤ o รบspฤchu nebo neรบspฤchu, kterou View vykreslรญ uลพivateli. Schรฉma architektury MVC je znรกzornฤno nรญลพe:

Proฤ pouลพรญvat MVC Architextura v JSP?
Pลed skokemping Abychom pochopili, jak MVC funguje v JSP, je uลพiteฤnรฉ pochopit, proฤ vรฝvojรกลi tento vzorec pouลพรญvajรญ. Mรญchรกnรญ obchodnรญ logiky, volรกnรญ databรกze a HTML v rรกmci jednรฉ JSP strรกnky rychle vede k neudrลพovatelnรฉmu โลกpagetovรฉmuโ kรณdu. MVC to ลeลกรญ tรญm, ลพe kaลพdรฉmu aspektu pลidฤluje vlastnรญ vrstvu:
- Code stรกvรก se snadnฤji ฤitelnรฝm, protoลพe kaลพdรฝ soubor mรก jednu odpovฤdnost.
- Tรฝmy mohou pracovat na View, Controller a Model paralelnฤ bez konfliktลฏ.
- Jednotkovรฉ testy cรญlรญ pลรญmo na model, bez dotyku s vykreslovรกnรญm JSP.
- vรฝmฤnaping JSP View pro odpovฤฤ JSON nebo jinรฝ ลกablonovacรญ engine je pลรญmoฤarรฝ.
Jak funguje MVC v JSP
V aplikaci MVC zaloลพenรฉ na JSP se kaลพdรก vrstva mapuje na specifickรฝ Java technologie. Soubory JSP vykreslujรญ zobrazenรญ (View), Servlet funguje jako kontroler (Controller) a JavaBeany zapouzdลujรญ model. Nรกsledujรญcรญ ฤรกsti vysvฤtlujรญ odpovฤdnosti jednotlivรฝch vrstev.
Modelovรก vrstva
- Toto je datovรก vrstva, kterรก obsahuje obchodnรญ logiku systรฉmu.
- Obsahuje vลกechna data aplikace.
- Pลedstavuje takรฉ stav aplikace.
- Je postaven z JavaBeany nebo POJO, kterรฉ se pลipojujรญ k databรกze.
- Kontroler komunikuje s modelem, aby naฤetl data a pลeposรญlal je do vrstvy zobrazenรญ.
- Model se pลipojรญ k databรกzi a uloลพรญ do nรญ data.
Zobrazit vrstvu
- Toto je prezentaฤnรญ vrstva aplikace.
- Sklรกdรก se z HTML, JSP, CSS a JavaSkript.
- Obvykle zobrazuje uลพivatelskรฉ rozhranรญ aplikace.
- Zobrazuje data naฤtenรก z Controlleru, kterรฝ zase naฤรญtรก data z tลรญd vrstev modelu.
- Vrstva View vykresluje data v uลพivatelskรฉm rozhranรญ aplikace bez nutnosti pouลพรญvat obchodnรญ logiku.
Vrstva ovladaฤe
- Funguje jako rozhranรญ mezi pohledem a modelem.
- Zachycuje vลกechny poลพadavky, kterรฉ pลichรกzejรญ z vrstvy View.
- Pลijรญmรก poลพadavky z vrstvy View, zpracovรกvรก je a provรกdรญ validaci poลพadavku.
- Poลพadavek je pลeposรญlรกn do vrstvy Model ke zpracovรกnรญ dat. Jakmile je poลพadavek zpracovรกn, Model odeลกle vรฝsledek zpฤt do Controlleru s poลพadovanรฝmi informacemi, kterรฉ se nรกslednฤ zobrazรญ v View.
Vรฝhody MVC Architecture
Vรฝhody MVC jsou:
- Snadno se udrลพuje
- Snadno se prodluลพuje
- Snadno testovatelnรฉ
- Ovlรกdรกnรญ navigace je centralizovanรฉ
- Volnรก vazba mezi vrstvami zvyลกuje bezpeฤnost refaktoringu
- Paralelnรญ vรฝvoj je moลพnรฝ pro vรญce ฤlenลฏ tรฝmu
Pลรญklad nรกvrhu aplikace JSP s MVC Architecture
V tomto pลรญkladu si ukรกลพeme, jak pouลพรญt architekturu MVC v JSP aplikaci.
- Vezmeme si pลรญklad formulรกลe se dvฤma promฤnnรฝmi, โe-mailโ a โhesloโ, kterรฉ pลedstavujรญ naลกi vrstvu zobrazenรญ.
- Jakmile uลพivatel zadรก e-mail a heslo a klikne na tlaฤรญtko Odeslat, akce se pลedรก do servletu Mvc_servlet, kde se pลedรกvajรญ e-mail a heslo.
- Mvc_servlet je vrstva Controller. Zde v Mvc_servlet je poลพadavek odeslรกn objektu bean, kterรฝ funguje jako vrstva Model.
- Hodnoty e-mailu a hesla jsou nastaveny do beanu a uloลพeny pro dalลกรญ pouลพitรญ.
- Z beanu se naฤte hodnota a zobrazรญ se ve vrstvฤ View.
Mvc_example.jsp (Zobrazit)
<%@ 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>
Vysvฤtlenรญ kรณdu:
Zobrazit vrstvu:
Code ลรกdek 10โ15: Zde bereme formulรกล, kterรฝ mรก jako parametry dvฤ pole, โe-mailโ a โhesloโ, a tento poลพadavek je tลeba pลeposlat kontroleru Mvc_servlet.java, kterรฝ je pลedรกvรกn v atributu action. HTTP metoda, kterou je pลedรกvรกn, je POST.
Mvc_servlet.java (kontrolรฉr)
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); } }
Vysvฤtlenรญ kรณdu:
Vrstva ลรญdicรญ jednotky:
Code ลรกdek 14: Mvc_servlet rozลกiลuje HttpServlet.
Code ลรกdek 26: Protoลพe se pouลพรญvรก metoda POST, poลพadavek vstupuje do metody doPost servletu, kterรก poลพadavek zpracuje a uloลพรญ do objektu bean jako testobj.
Code ลรกdek 34: Pomocรญ objektu request nastavujeme atribut โgurubeanโ, kterรฉmu je pลiลazena hodnota testobj.
Code ลรกdek 35: Zde pouลพรญvรกme objekt RequestDispatcher k pลeposlรกnรญ zprรกvy o รบspฤchu do 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"; }
Vysvฤtlenรญ kรณdu:
Modelovรก vrstva:
Code ลรกdek 7โ17: Obsahuje metody pro zรญskรกvรกnรญ a nastavovรกnรญ e-mailu a hesla, kterรฉ jsou ฤleny tลรญdy TestBean.
Code ลรกdek 19โ20: Definuje e-mail a heslo ฤlenลฏ typu String ve tลรญdฤ bean.
Mvc_success.jsp (Zobrazenรญ vรฝsledkลฏ)
<%@ 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>
Vysvฤtlenรญ kรณdu:
Code ลรกdek 12: Atribut naฤรญtรกme pomocรญ objektu poลพadavku, kterรฝ byl nastaven v metodฤ doPost servletu.
Code ลรกdek 13: Vypรญลกeme uvรญtacรญ zprรกvu a e-mailovou adresu, kterรก byla uloลพena v objektu bean.
Vรฝstup
Kdyลพ spustรญte vรฝลกe uvedenรฝ kรณd, zรญskรกte nรกsledujรญcรญ vรฝstup:
Po otevลenรญ souboru mvc_example.jsp se zobrazรญ formulรกล s poli pro e-mail a heslo a tlaฤรญtkem Odeslat.
Jakmile do formulรกลe zadรกte e-mail a heslo a kliknete na tlaฤรญtko Odeslat:
Po kliknutรญ na tlaฤรญtko Odeslat se vรฝstup zobrazรญ nรญลพe:
Kdyลพ na obrazovce zadรกte e-mail a heslo a kliknete na tlaฤรญtko Odeslat, รบdaje se uloลพรญ do TestBeanu. Z TestBeanu se naฤtou na dalลกรญ obrazovce a zobrazรญ se zprรกva o รบspฤchu. JSP hraje roli prezentace dat a poskytovรกnรญ zobrazenรญ (View), zatรญmco Servlet funguje jako Controller a JavaBean slouลพรญ jako model. Hlavnรญ obchodnรญ logika je obsaลพena ve vrstvฤ modelu.


