MVC i JSP (Architecture)
Hvad er MVC?
MVC er en arkitektur, der adskiller forretningslogik, præsentation og data. I MVC,
- M står for Model
- V står for View
- C står for controller.
MVC er en systematisk måde at bruge applikationen, hvor flowet starter fra visningslaget, hvor anmodningen hæves og behandles i controllerlaget og sendes til modellaget for at indsætte data og få succes- eller fiaskomeddelelsen tilbage. MVC'en ArchiTecture diagram er repræsenteret nedenfor:

Model lag
- Dette er datalaget, som består af systemets forretningslogik.
- Den består af alle applikationens data
- Det repræsenterer også ansøgningens tilstand.
- Den består af klasser, som har forbindelse til database.
- Controlleren forbinder med model og henter dataene og sender til visningslaget.
- Modellen forbinder også med databasen og gemmer dataene i en database, som er forbundet til den.
Se lag
- Dette er et præsentationslag.
- Det består af HTML, JSP osv. ind i det.
- Det præsenterer normalt applikationens brugergrænseflade.
- Det bruges til at vise de data, der hentes fra controlleren, som igen henter data fra modellagsklasser.
- Dette visningslag viser dataene på applikationens brugergrænseflade.
Controller lag
- Det fungerer som en grænseflade mellem View og Model.
- Den opsnapper alle de anmodninger, der kommer fra visningslaget.
- Den modtager anmodningerne fra visningslaget og behandler anmodningerne og udfører den nødvendige validering for anmodningen.
- Denne anmodning sendes yderligere til modellaget til databehandling, og når anmodningen er behandlet, sender den tilbage til controlleren med den nødvendige information og vises i overensstemmelse hermed af visningen.
Fordele ved MVC Architecture
Fordelene ved MVC er:
- Let at vedligeholde
- Nem at forlænge
- Let at teste
- Navigationskontrol er centraliseret
Eksempel på JSP Application Design med MVC Architecture
I dette eksempel skal vi vise, hvordan man bruger MVC-arkitektur i JSP.
- Vi tager eksemplet med en formular med to variabler "e-mail" og "adgangskode", som er vores visningslag.
- Når brugeren indtaster e-mail og adgangskode og klikker på send, så overføres handlingen i mvc_servlet, hvor e-mail og adgangskode sendes.
- Denne mvc_servlet er controller-lag. Her i mvc_servlet sendes anmodningen til bønneobjektet, der fungerer som modellag.
- E-mail- og adgangskodeværdierne sættes i bønnen og gemmes til yderligere formål.
- Fra bønnen hentes værdien og vises i visningslaget.
Mvc_example.jsp
<%@ 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:
Kodelinje 10-15: Her tager vi en formular, som har to felter som parameter "e-mail" og "adgangskode", og denne anmodning skal videresendes til en controller Mvc_servlet.java, som sendes i aktion. Metoden, hvorigennem det sendes, er POST-metoden.
Mvc_servlet.java
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:
Controller lag
Kodelinje 14:mvc_servlet udvider HttpServlet.
Kodelinje 26: Da den anvendte metode er POST, kommer anmodningen ind i en doPost-metode for servlet'en, som behandler anmodningerne og gemmer i bønneobjektet som testobj.
Kodelinje 34: Ved at bruge request-objektet indstiller vi attributten som gurubean, som tildeles værdien af testobj.
Kodelinje 35: Her bruger vi request dispatcher objekt til at sende succesmeddelelsen til mvc_success.jsp
TestBean.java
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:
Kodelinje 7-17: Den indeholder e-mail- og kodeords- og sættere, som er medlemmer af Test Bean-klassen
Kodelinje 19-20: Det definerer medlemmernes e-mail og adgangskode af strengtype i bønneklassen.
Mvc_success.jsp
<%@ 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:
Kodelinje 12: vi får attributten ved hjælp af request-objektet, som er blevet sat i doPost-metoden for servlet'en.
Kodelinje 13: Vi udskriver velkomstbeskeden og e-mail-id'et, som er blevet gemt i bønneobjektet
Output:
Når du udfører ovenstående kode, får du følgende output:
Når du klikker på mvc_example.jsp får du formularen med e-mail og adgangskode med indsend-knappen.
Når du har indtastet e-mail og adgangskode til formularen og derefter klikket på send
Når du har klikket på send, vises output som nedenfor
Output:
Når du indtaster e-mail og adgangskode på skærmen og klikker på send derefter, gemmes detaljerne i TestBean og fra TestBean hentes de på næste skærmbillede for at få succesbeskeden.
Resumé
I denne artikel har vi lært om MVC, dvs. Model View Controller-arkitekturen.
JSP spiller rollen som præsentation af data og controller. Det er en grænseflade mellem model og visning, mens model forbinder både til controlleren og databasen. Hovedforretningslogikken er til stede i modellaget.