MVC i JSP (Architecture)
โก Smart sammanfattning
MVC i JSP separerar applikationsproblem i modell-, vy- och kontrollerlager, dรคr JSP renderar vyn, en servlet fungerar som kontroller, och JavaBรถnor inkapslar modellen fรถr rena, testbara och underhรฅllbara webbapplikationer.

Vad รคr MVC?
MVC stรฅr fรถr Model-View-Controller. Det รคr ett designmรถnster fรถr mjukvara som delar upp en applikation i tre sammankopplade lager: affรคrslogik, presentation och data. I MVC:
- M stรฅr fรถr modell
- V stรฅr fรถr View
- C stรฅr fรถr Controller
MVC รคr ett systematiskt sรคtt att bygga applikationer dรคr flรถdet bรถrjar pรฅ View-lagret. Begรคran genereras av anvรคndaren, bearbetas i Controller-lagret och skickas till Model-lagret fรถr att infoga eller hรคmta data. Modellen returnerar sedan ett svar om framgรฅng eller misslyckande som View renderar fรถr anvรคndaren. MVC-arkitekturdiagrammet representeras nedan:

Varfรถr anvรคnda MVC ArchiStruktur i JSP?
Fรถre hoppping Om man gรฅr in pรฅ hur MVC fungerar i JSP, hjรคlper det att fรถrstรฅ varfรถr utvecklare anvรคnder detta mรถnster. Att blanda affรคrslogik, databasanrop och HTML pรฅ en enda JSP-sida producerar snabbt ounderhรฅllbar spaghettikod. MVC รฅtgรคrdar detta genom att ge varje problem ett eget lager:
- Code blir lรคttare att lรคsa eftersom varje fil har ett enda ansvar.
- Team kan arbeta parallellt med vyn, kontrollanten och modellen utan konflikter.
- Enhetstester riktar sig direkt mot modellen, utan att vidrรถra JSP-rendering.
- Swapping en JSP-vy fรถr ett JSON-svar eller en annan mallmotor รคr enkelt.
Hur MVC fungerar i JSP
I en JSP-baserad MVC-applikation mappas varje lager till en specifik Java teknik. JSP-filer renderar vyn, en Servlet fungerar som Controller och JavaBรถnor sammanfattar modellen. Avsnitten nedan fรถrklarar varje lagers ansvarsomrรฅden.
Modelllager
- Detta รคr datalagret som innehรฅller systemets affรคrslogik.
- Den bestรฅr av all data i applikationen.
- Den representerar ocksรฅ applikationens tillstรฅnd.
- Den รคr byggd av JavaBรถnor eller POJO:er som ansluter till databas.
- Kontrollern kommunicerar med modellen fรถr att hรคmta data och vidarebefordrar den till vylagret.
- Modellen ansluter till databasen och sparar data i den.
Visa lager
- Detta รคr applikationens presentationsskikt.
- Den bestรฅr av HTML, JSP, CSS och JavaManus.
- Den presenterar normalt programmets anvรคndargrรคnssnitt.
- Den visar data som hรคmtas frรฅn kontrollenheten, som i sin tur hรคmtar data frรฅn modelllagerklasser.
- Vylagret renderar data i applikationens anvรคndargrรคnssnitt utan att innehรฅlla affรคrslogik.
Kontrolllager
- Det fungerar som ett grรคnssnitt mellan View och Model.
- Den fรฅngar upp alla fรถrfrรฅgningar som kommer frรฅn View-lagret.
- Den tar emot fรถrfrรฅgningarna frรฅn vylagret, bearbetar dem och utfรถr validering pรฅ fรถrfrรฅgan.
- Begรคran vidarebefordras till modelllagret fรถr databearbetning. Nรคr begรคran har bearbetats skickar modellen resultatet tillbaka till kontrollenheten med den information som krรคvs, vilket sedan visas i vyn.
Fรถrdelar med MVC Architecture
Fรถrdelarna med MVC รคr:
- Lรคtt att underhรฅlla
- Lรคtt att fรถrlรคnga
- Lรคtt att testa
- Navigationskontrollen รคr centraliserad
- Lรถs koppling mellan lager gรถr refactoring sรคkrare
- Parallell utveckling av flera teammedlemmar รคr mรถjlig
Exempel pรฅ JSP Application Design med MVC Architecture
I det hรคr exemplet ska vi visa hur man anvรคnder MVC-arkitektur i en JSP-applikation.
- Vi tar exemplet med ett formulรคr med tvรฅ variabler, "e-post" och "lรถsenord", som representerar vรฅrt vylager.
- Nรคr anvรคndaren anger e-postadress och lรถsenord och klickar pรฅ Skicka skickas รฅtgรคrden till Mvc_servlet dรคr e-postadress och lรถsenord skickas.
- Mvc_servlet รคr Controller-lagret. Hรคr i Mvc_servlet skickas begรคran till bรถnobjektet som fungerar som Model-lagret.
- E-postadressen och lรถsenordet stรคlls in i bรถnan och lagras fรถr vidare anvรคndning.
- Frรฅn bรถnan hรคmtas vรคrdet och visas i View-lagret.
Mvc_example.jsp (Visa)
<%@ 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>
Fรถrklaring av koden:
Visa lager:
Code Rad 10-15: Hรคr anvรคnder vi ett formulรคr som har tvรฅ fรคlt som parametrar, "email" och "password", och denna begรคran mรฅste vidarebefordras till en kontroller, Mvc_servlet.java, som skickas i action-attributet. HTTP-metoden genom vilken den skickas รคr POST.
Mvc_servlet.java (Kontrollant)
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); } }
Fรถrklaring av koden:
Kontrolllager:
Code Linje 14: Mvc_servlet utรถkar HttpServlet.
Code Linje 26: Eftersom metoden som anvรคnds รคr POST, gรฅr begรคran in i doPost-metoden i Servleten, som bearbetar begรคran och sparar den i bean-objektet som testobj.
Code Linje 34: Med hjรคlp av request-objektet stรคller vi in โโattributet "gurubean" som tilldelas vรคrdet testobj.
Code Linje 35: Hรคr anvรคnder vi RequestDispatcher-objektet fรถr att vidarebefordra framgรฅngsmeddelandet till mvc_success.jsp.
TestBean.java (Modell)
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"; }
Fรถrklaring av koden:
Modelllager:
Code Rad 7-17: Den innehรฅller hรคmtare och sรคttare fรถr e-postadress och lรถsenord som รคr medlemmar i TestBean-klassen.
Code Rad 19-20: Den definierar medlemmarnas e-postadress och lรถsenord av typen String i bรถnklassen.
Mvc_success.jsp (Resultatvy)
<%@ 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>
Fรถrklaring av koden:
Code Linje 12: Vi hรคmtar attributet med hjรคlp av request-objektet som stรคlldes in i doPost-metoden i Servleten.
Code Linje 13: Vi skriver ut vรคlkomstmeddelandet och e-postadressen som har sparats i bean-objektet.
Produktion
Nรคr du kรถr ovanstรฅende kod fรฅr du fรถljande utdata:
Nรคr du รถppnar mvc_example.jsp fรฅr du upp formulรคret med fรคlt fรถr e-postadress och lรถsenord samt knappen Skicka.
Nรคr du har angett e-postadress och lรถsenord i formulรคret och klickat pรฅ Skicka:
Efter att du klickat pรฅ Skicka visas resultatet enligt nedan:
Nรคr du anger e-postadress och lรถsenord pรฅ skรคrmen och klickar pรฅ Skicka sparas uppgifterna i TestBean. Frรฅn TestBean hรคmtas de pรฅ nรคsta skรคrm fรถr att visa meddelandet om att processen lyckades. JSP spelar rollen att presentera data och tillhandahรฅlla vyn, medan servleten fungerar som kontrollant och JavaBean fungerar som modell. Den huvudsakliga affรคrslogiken finns i modelllagret.


