MVC i JSP (Architecture)
โก Smart opsummering
MVC i JSP opdeler applikationsproblemer i Model-, View- og Controller-lag, hvor JSP gengiver View'en, en Servlet fungerer som Controller, og JavaBeans indkapsler modellen for at skabe rene, testbare og vedligeholdelige webapplikationer.

Hvad er MVC?
MVC stรฅr for Model-View-Controller. Det er et softwaredesignmรธnster, der opdeler en applikation i tre sammenkoblede lag: forretningslogik, prรฆsentation og data. I MVC:
- M stรฅr for Model
- V stรฅr for Udsigt
- C stรฅr for Controller
MVC er en systematisk mรฅde at bygge applikationer pรฅ, hvor flowet starter pรฅ View-laget. Anmodningen fremsรฆttes af brugeren, behandles i Controller-laget og sendes til Model-laget for at indsรฆtte eller hente data. Modellen returnerer derefter et succes- eller fiasko-svar, som View'en gengiver for brugeren. MVC-arkitekturdiagrammet er reprรฆsenteret nedenfor:

Hvorfor bruge MVC ArchiTekstur i JSP?
Fรธr springping Hvis man ser nรฆrmere pรฅ, hvordan MVC fungerer i JSP, hjรฆlper det med at forstรฅ, hvorfor udviklere anvender dette mรธnster. At blande forretningslogik, databasekald og HTML pรฅ en enkelt JSP-side producerer hurtigt uvedligeholdelig spaghettikode. MVC lรธser dette ved at give hvert problem sit eget lag:
- Code bliver lettere at lรฆse, fordi hver fil har et enkelt ansvar.
- Teams kan arbejde parallelt pรฅ View, Controller og Model uden konflikter.
- Enhedstests er rettet direkte mod modellen uden at rรธre ved JSP-rendering.
- Swapping En JSP-visning til et JSON-svar eller en anden skabelonmotor er ligetil.
Sรฅdan fungerer MVC i JSP
I en JSP-baseret MVC-applikation knyttes hvert lag til en specifik Java teknologi. JSP-filer gengiver visningen, en Servlet fungerer som controller, og JavaBรธnner indkapsler modellen. Afsnittene nedenfor forklarer ansvarsomrรฅderne for hvert lag.
Model lag
- Dette er datalaget, der indeholder systemets forretningslogik.
- Den bestรฅr af alle applikationens data.
- Det reprรฆsenterer ogsรฅ ansรธgningens tilstand.
- Den er bygget af JavaBรธnner eller POJO'er, der forbinder til database.
- Controlleren kommunikerer med modellen for at hente data og videresende dem til visningslaget.
- Modellen opretter forbindelse til databasen og gemmer data i den.
Se lag
- Dette er applikationens prรฆsentationslag.
- Den bestรฅr af HTML, JSP, CSS og JavaManuskript.
- Den prรฆsenterer normalt brugergrรฆnsefladen for applikationen.
- Den viser de data, der hentes fra controlleren, som igen henter data fra modellagsklasser.
- View-laget gengiver data pรฅ applikationens brugergrรฆnseflade uden at indeholde forretningslogik.
Controller lag
- Det fungerer som en grรฆnseflade mellem View og Model.
- Den opfanger alle anmodninger, der kommer fra View-laget.
- Den modtager anmodningerne fra View-laget, behandler dem og udfรธrer validering pรฅ anmodningen.
- Anmodningen videresendes til modellaget til databehandling. Nรฅr anmodningen er behandlet, sender modellen resultatet tilbage til controlleren med de nรธdvendige oplysninger, som derefter vises i visningen.
Fordele ved MVC Architecture
Fordelene ved MVC er:
- Let at vedligeholde
- Nem at forlรฆnge
- Let at teste
- Navigationskontrol er centraliseret
- Lรธs kobling mellem lag gรธr refactoring mere sikker
- Parallel udvikling af flere teammedlemmer er mulig
Eksempel pรฅ JSP Application Design med MVC Architecture
I dette eksempel vil vi vise, hvordan man bruger MVC-arkitektur i en JSP-applikation.
- Vi tager eksemplet med en formular med to variabler, "e-mail" og "adgangskode", som reprรฆsenterer vores visningslag.
- Nรฅr brugeren indtaster e-mail og adgangskode og klikker pรฅ Send, sendes handlingen til Mvc_servlet, hvor e-mail og adgangskode videregives.
- Mvc_servlet er controllerlaget. Her i Mvc_servlet sendes anmodningen til bean-objektet, der fungerer som modellaget.
- E-mail- og adgangskodevรฆrdierne indstilles i bean'en og gemmes til senere brug.
- Fra beannen hentes vรฆrdien og vises i View-laget.
Mvc_example.jsp (Visning)
<%@ 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>
Forklaring af koden:
Vis lag:
Code Linje 10-15: Her bruger vi en formular med to felter som parametre, "email" og "password", og denne anmodning skal videresendes til en controller, Mvc_servlet.java, som sendes i action-attributten. HTTP-metoden, som den sendes igennem, er POST.
Mvc_servlet.java (Controller)
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); } }
Forklaring af koden:
Controllerlag:
Code Linje 14: Mvc_servlet udvider HttpServlet.
Code Linje 26: Da den anvendte metode er POST, indtaster anmodningen doPost-metoden i Servlet'en, som behandler anmodningen og gemmer den i bean-objektet som testobj.
Code Linje 34: Ved hjรฆlp af request-objektet indstiller vi attributten "gurubean", som tildeles vรฆrdien testobj.
Code Linje 35: Her bruger vi RequestDispatcher-objektet til at videresende succesbeskeden til 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"; }
Forklaring af koden:
Modellag:
Code Linje 7-17: Den indeholder getter- og setter-parametrene for e-mail og adgangskode, som er medlemmer af TestBean-klassen.
Code Linje 19-20: Den definerer medlemmernes e-mail og adgangskode af typen String i bean-klassen.
Mvc_success.jsp (Resultatvisning)
<%@ 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>
Forklaring af koden:
Code Linje 12: Vi henter attributten ved hjรฆlp af det request-objekt, der blev angivet i doPost-metoden i Servlet'en.
Code Linje 13: Vi udskriver velkomstbeskeden og e-mail-id'et, som er blevet gemt i bean-objektet.
Produktion
Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output:
Nรฅr du รฅbner mvc_example.jsp, fรฅr du formularen med felterne for e-mail og adgangskode samt knappen Send.
Nรฅr du har indtastet e-mail og adgangskode i formularen og klikket pรฅ Send:
Efter at have klikket pรฅ Send, vises outputtet som fรธlger:
Nรฅr du indtaster e-mail og adgangskode pรฅ skรฆrmen og klikker pรฅ Send, gemmes oplysningerne i TestBean. Fra TestBean hentes de pรฅ den nรฆste skรฆrm for at vise succesmeddelelsen. JSP spiller rollen med at prรฆsentere dataene og levere visningen, mens servlet'en fungerer som controller og JavaBean fungerer som model. Den primรฆre forretningslogik er indeholdt i modellaget.


