MVC u JSP-u (Architekstura)
โก Pametni saลพetak
MVC u JSP-u dijeli brigu o aplikaciji na slojeve Model, View i Controller, gdje JSP renderira View, Servlet djeluje kao Controller, a JavaBeani enkapsuliraju Model za ฤiste, testirane i odrลพavave web aplikacije.

ล to je MVC?
MVC je kratica za Model-View-Controller. To je obrazac dizajna softvera koji aplikaciju dijeli na tri meฤusobno povezana sloja: poslovnu logiku, prezentaciju i podatke. U MVC-u:
- M oznaฤava Model
- V oznaฤava Pogled
- C kratica za Kontroler
MVC je sustavan naฤin izgradnje aplikacija gdje tok poฤinje na sloju View. Zahtjev pokreฤe korisnik, obraฤuje se u sloju Controller i ลกalje se sloju Model za umetanje ili dohvaฤanje podataka. Model zatim vraฤa odgovor o uspjehu ili neuspjehu koji View prikazuje korisniku. Dijagram MVC arhitekture prikazan je u nastavku:

Zaลกto koristiti MVC Architekstura u JSP-u?
Prije skokaping U uvid u to kako MVC funkcionira u JSP-u, korisno je razumjeti zaลกto programeri usvajaju ovaj obrazac. Mijeลกanje poslovne logike, poziva baze podataka i HTML-a unutar jedne JSP stranice brzo stvara neodrลพiv ลกpageti kod. MVC to rjeลกava tako ลกto svakom aspektu daje vlastiti sloj:
- Code postaje lakลกe za ฤitanje jer svaka datoteka ima jednu odgovornost.
- Timovi mogu paralelno raditi na Viewu, Controlleru i Modelu bez sukoba.
- Jediniฤni testovi ciljaju izravno na Model, bez dodirivanja JSP renderiranja.
- Razmijenitiping JSP prikaz za JSON odgovor ili neki drugi mehanizam predloลพaka je jednostavan.
Kako MVC funkcionira u JSP-u
U MVC aplikaciji temeljenoj na JSP-u, svaki sloj se mapira na odreฤeni Java tehnologija. JSP datoteke prikazuju prikaz, Servlet djeluje kao kontroler i JavaBeanovi obuhvaฤaju Model. Odjeljci u nastavku objaลกnjavaju odgovornosti svakog sloja.
Sloj modela
- Ovo je podatkovni sloj koji sadrลพi poslovnu logiku sustava.
- Sastoji se od svih podataka aplikacije.
- Takoฤer predstavlja stanje aplikacije.
- Izgraฤen je od JavaBeanovi ili POJO-i koji se povezuju s baza podataka.
- Kontroler komunicira s modelom kako bi dohvatio podatke i proslijedio ih sloju View.
- Model se povezuje s bazom podataka i u nju pohranjuje podatke.
Prikaz sloja
- Ovo je prezentacijski sloj aplikacije.
- Sastoji se od HTML-a, JSP-a, CSS-a i JavaSkripta.
- Obiฤno prikazuje korisniฤko suฤelje aplikacije.
- Prikazuje podatke koji se dohvaฤaju iz Kontrolera, koji zauzvrat dohvaฤa podatke iz klasa slojeva modela.
- Sloj View prikazuje podatke na korisniฤkom suฤelju aplikacije bez da sadrลพi poslovnu logiku.
Sloj kontrolera
- Djeluje kao suฤelje izmeฤu pogleda i modela.
- Presreฤe sve zahtjeve koji dolaze iz sloja View.
- Prima zahtjeve iz sloja View, obraฤuje ih i provodi validaciju zahtjeva.
- Zahtjev se prosljeฤuje sloju Modela na obradu podataka. Nakon ลกto je zahtjev obraฤen, Model ลกalje rezultat natrag Kontroleru s potrebnim informacijama, koje View zatim prikazuje.
Prednosti MVC-a Architektura
Prednosti MVC-a su:
- Jednostavan za odrลพavanje
- Lako se produลพava
- Jednostavan za testiranje
- Kontrola navigacije je centralizirana
- Labava povezanost izmeฤu slojeva ฤini refaktoriranje sigurnijim
- Moguฤ je paralelni razvoj od strane viลกe ฤlanova tima
Primjer dizajna JSP aplikacije s MVC-om Architektura
U ovom primjeru ฤemo pokazati kako koristiti MVC arhitekturu u JSP aplikaciji.
- Uzimamo primjer obrasca s dvije varijable, โe-poลกtaโ i โlozinkaโ, koje predstavljaju naลก sloj Prikaz.
- Nakon ลกto korisnik unese e-poลกtu i lozinku te klikne Poลกalji, akcija se prosljeฤuje Mvc_servletu gdje se prosljeฤuju e-poลกta i lozinka.
- Mvc_servlet je kontrolni sloj. Ovdje u Mvc_servletu, zahtjev se ลกalje objektu beana koji djeluje kao sloj modela.
- Vrijednosti e-poลกte i lozinke postavljaju se u bean i pohranjuju za daljnju upotrebu.
- Iz beana se vrijednost dohvaฤa i prikazuje u sloju View.
Mvc_example.jsp (Prikaz)
<%@ 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>
Objaลกnjenje koda:
Prikaz sloja:
Code Redak 10-15: Ovdje uzimamo obrazac koji ima dva polja kao parametre, โe-poลกtaโ i โlozinkaโ, a ovaj zahtjev treba proslijediti kontroleru, Mvc_servlet.java, koji se prosljeฤuje u atributu akcije. HTTP metoda kroz koju se prosljeฤuje je 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); } }
Objaลกnjenje koda:
Sloj kontrolera:
Code Redak 14: Mvc_servlet proลกiruje HttpServlet.
Code Redak 26: Buduฤi da se koristi POST metoda, zahtjev ulazi u doPost metodu Servleta, koja obraฤuje zahtjev i sprema ga u bean objekt kao testobj.
Code Redak 34: Koristeฤi objekt zahtjeva, postavljamo atribut โgurubeanโ kojem je dodijeljena vrijednost testobj.
Code Redak 35: Ovdje koristimo objekt RequestDispatcher za prosljeฤivanje poruke o uspjehu na 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"; }
Objaลกnjenje koda:
Sloj modela:
Code Redak 7-17: Sadrลพi funkcije za dohvaฤanje i postavljanje e-poลกte i lozinke koje su ฤlanovi klase TestBean.
Code Redak 19-20: Definira e-poลกtu i lozinku ฤlanova tipa String u klasi beana.
Mvc_success.jsp (Prikaz rezultata)
<%@ 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>
Objaลกnjenje koda:
Code Redak 12: Atribut dohvaฤamo pomoฤu objekta zahtjeva koji je postavljen u metodi doPost Servleta.
Code Redak 13: Ispisujemo poruku dobrodoลกlice i adresu e-poลกte koja je spremljena u bean objektu.
Izlaz
Kada izvrลกite gornji kod, dobit ฤete sljedeฤi izlaz:
Kada otvorite mvc_example.jsp, dobit ฤete obrazac s poljima za e-poลกtu i lozinku te gumbom Poลกalji.
Nakon ลกto u obrazac unesete e-poลกtu i lozinku i kliknete Poลกalji:
Nakon klika na Poลกalji, izlaz je prikazan kao u nastavku:
Kada unesete e-poลกtu i lozinku na ekranu i kliknete Poลกalji, podaci se spremaju u TestBean. Iz TestBeana se dohvaฤaju na sljedeฤem ekranu kako bi se prikazala poruka o uspjehu. JSP igra ulogu predstavljanja podataka i pruลพanja prikaza (View), dok Servlet djeluje kao kontroler i JavaBean sluลพi kao Model. Glavna poslovna logika sadrลพana je u sloju Modela.


