MVC in JSP (Archistructuur)

⚡ Slimme samenvatting

MVC in JSP scheidt de verschillende aspecten van een applicatie in de lagen Model, View en Controller. JSP rendert de View, een Servlet fungeert als Controller en JavaBeans encapsuleren het Model voor schone, testbare en onderhoudbare webapplicaties.

  • 🧱 Scheiding van zorgen: Het model bevat de data en bedrijfslogica, de view geeft de gebruikersinterface weer en de controller routeert de verzoeken tussen beide.
  • 📐 JSP-rol: JSP-pagina's genereren dynamische markup voor de weergavelaag, terwijl een Servlet de verwerking van verzoeken op de controllerlaag afhandelt.
  • 🔀 Aanvraagproces: De browser verstuurt een formulier, de servlet valideert de invoer en vult een JavaDe Bean stuurt de controle vervolgens door naar een JSP-weergave voor de respons.
  • Voordelen op het gebied van onderhoudbaarheid: De MVC-architectuur in JSP maakt webapplicaties gemakkelijker te onderhouden, uit te breiden, te testen met unit-tests en centraal te navigeren.
  • 🧪 Werkend voorbeeld: Een inlogformulier verstuurt gegevens naar Mvc_servlet, die het e-mailadres en wachtwoord opslaat in TestBean en vervolgens doorstuurt naar mvc_success.jsp.
  • 🤖 AI-modernisering: AI-assistenten helpen nu bij het refactoren van verouderde JSP MVC-code naar Spring MVC, waarbij controllers, DTO's en tests op aanvraag worden gegenereerd.

MVC in JSP (Archistructuur)

Wat is MVC?

MVC staat voor Model-View-Controller. Het is een softwareontwerppatroon dat een applicatie opdeelt in drie onderling verbonden lagen: bedrijfslogica, presentatie en data. In MVC:

  • M staat voor Model
  • V staat voor View
  • C staat voor Controller

MVC is een systematische manier om applicaties te bouwen waarbij de flow begint in de View-laag. De gebruiker doet een verzoek, dit wordt verwerkt in de Controller-laag en vervolgens naar de Model-laag gestuurd om gegevens in te voegen of op te halen. Het Model retourneert dan een succes- of foutreactie die de View aan de gebruiker toont. Het MVC-architectuurdiagram is hieronder weergegeven:

MVC Architectuur
MVC Archistructuurdiagram

Waarom MVC gebruiken? Archistructuur in JSP?

Voordat je springtping Om te begrijpen hoe MVC werkt in JSP, is het handig om te weten waarom ontwikkelaars dit patroon gebruiken. Het combineren van bedrijfslogica, databaseaanroepen en HTML in één enkele JSP-pagina leidt al snel tot onbeheersbare spaghetti-code. MVC lost dit op door elk onderdeel een eigen laag te geven:

  • Code Het wordt gemakkelijker te lezen omdat elk bestand één enkele functie heeft.
  • Teams kunnen parallel aan de View, Controller en Model werken zonder conflicten.
  • Unit tests richten zich direct op het Model, zonder de JSP-rendering aan te raken.
  • Ruilenping Een JSP-weergave voor een JSON-antwoord of een andere sjabloonengine is eenvoudig.

Hoe MVC werkt in JSP

In een op JSP gebaseerde MVC-applicatie komt elke laag overeen met een specifiek element. Java technologie. JSP-bestanden renderen de weergave, een Servlet fungeert als controller, en JavaBeans omsluiten het model. De onderstaande secties leggen de verantwoordelijkheden van elke laag uit.

Modellaag

  • Dit is de datalaag die de bedrijfslogica van het systeem bevat.
  • Het bevat alle gegevens van de applicatie.
  • Het vertegenwoordigt ook de status van de applicatie.
  • Het is gebouwd van JavaBeans of POJO's die verbinding maken met de databank.
  • De controller communiceert met het model om gegevens op te halen en stuurt deze door naar de weergavelaag.
  • Het model maakt verbinding met de database en slaat gegevens daarin op.

Laag bekijken

  • Dit is de presentatielaag van de applicatie.
  • Het bestaat uit HTML, JSP, CSS en JavaScript.
  • Het toont normaal gesproken de gebruikersinterface van de applicatie.
  • Het toont de gegevens die worden opgehaald uit de Controller, die op zijn beurt gegevens ophaalt uit de klassen van de Model-laag.
  • De View-laag geeft gegevens weer op de gebruikersinterface van de applicatie, zonder bedrijfslogica te bevatten.

Controllerlaag

  • Het fungeert als een interface tussen View en Model.
  • Het onderschept alle verzoeken die afkomstig zijn van de weergavelaag.
  • Het ontvangt de verzoeken van de View-laag, verwerkt ze en voert een validatie uit op het verzoek.
  • Het verzoek wordt doorgestuurd naar de Model-laag voor gegevensverwerking. Zodra het verzoek is verwerkt, stuurt het Model het resultaat met de benodigde informatie terug naar de Controller, die het vervolgens weergeeft.

Voordelen van MVC Architectuur

De voordelen van MVC zijn:

  • Gemakkelijk te onderhouden
  • Makkelijk te verlengen
  • Makkelijk te testen
  • De navigatiecontrole is gecentraliseerd
  • Losse koppeling tussen lagen maakt refactoring veiliger.
  • Parallelle ontwikkeling door meerdere teamleden is mogelijk.

Voorbeeld van JSP-applicatieontwerp met MVC Architectuur

In dit voorbeeld laten we zien hoe je de MVC-architectuur in een JSP-applicatie kunt gebruiken.

  • We nemen als voorbeeld een formulier met twee variabelen, "e-mail" en "wachtwoord", die onze weergavelaag vertegenwoordigen.
  • Zodra de gebruiker het e-mailadres en wachtwoord invoert en op 'Verzenden' klikt, wordt de actie doorgegeven aan Mvc_servlet, waar het e-mailadres en wachtwoord worden doorgegeven.
  • Mvc_servlet is de controllerlaag. In Mvc_servlet wordt het verzoek naar het bean-object gestuurd, dat fungeert als de modellaag.
  • De e-mail- en wachtwoordwaarden worden in de bean ingesteld en opgeslagen voor later gebruik.
  • De waarde wordt uit de bean opgehaald en in de View-laag weergegeven.

Mvc_example.jsp (Weergave)

<%@ 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>

Uitleg van de code:

Bekijk laag:

Code Lijn 10-15: Hier nemen we een formulier met twee parameters, "e-mail" en "wachtwoord", en dit verzoek moet worden doorgestuurd naar een controller, Mvc_servlet.java, die is doorgegeven in het action-attribuut. De HTTP-methode waarmee het wordt verzonden is 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);
	}

}

Uitleg van de code:

Controllerlaag:

Code Regel 14: Mvc_servlet is een uitbreiding van HttpServlet.

Code Regel 26: Omdat de gebruikte methode POST is, komt het verzoek terecht in de doPost-methode van de Servlet, die het verzoek verwerkt en opslaat in het bean-object als testobj.

Code Regel 34: Met behulp van het request-object stellen we het attribuut "gurubean" in, waaraan de waarde testobj wordt toegekend.

Code Regel 35: Hier gebruiken we het RequestDispatcher-object om het succesbericht door te sturen naar 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";


}

Uitleg van de code:

Modellaag:

Code Lijn 7-17: Het bevat de getters en setters voor e-mail en wachtwoord, die leden zijn van de TestBean-klasse.

Code Lijn 19-20: Het definieert het e-mailadres en wachtwoord van de leden als String-type in de bean-klasse.

Mvc_success.jsp (Resultaatweergave)

<%@ 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>

Uitleg van de code:

Code Regel 12: We halen het attribuut op met behulp van het request-object dat is ingesteld in de doPost-methode van de Servlet.

Code Regel 13: We printen het welkomstbericht en het e-mailadres dat in het bean-object is opgeslagen.

uitgang

Wanneer u de bovenstaande code uitvoert, krijgt u de volgende uitvoer:

Wanneer je mvc_example.jsp opent, krijg je een formulier te zien met velden voor e-mail en wachtwoord en een verzendknop.

Nadat je je e-mailadres en wachtwoord in het formulier hebt ingevoerd en op Verzenden hebt geklikt:

JSP-applicatieontwerp

Na het klikken op 'Verzenden' wordt de uitvoer als volgt weergegeven:

JSP-applicatieontwerp

Wanneer u uw e-mailadres en wachtwoord op het scherm invoert en op 'Verzenden' klikt, worden de gegevens opgeslagen in TestBean. Vanuit TestBean worden ze op het volgende scherm opgehaald om het succesbericht weer te geven. JSP speelt de rol van het presenteren van de data en het leveren van de weergave, terwijl de Servlet fungeert als de controller en de JavaBean fungeert als het model. De belangrijkste bedrijfslogica bevindt zich in de model-laag.

Veelgestelde vragen

MVC in JSP is een ontwerppatroon dat een webapplicatie opsplitst in drie lagen: Model (data en bedrijfslogica), View (JSP-pagina's die de gebruikersinterface weergeven) en Controller (een Servlet die verzoeken verwerkt en antwoorden doorstuurt).

JSP behoort primair tot de weergavelaag (View layer) omdat het dynamische HTML voor de gebruiker genereert. In het JSP Model 2-patroon vervult een Servlet de rol van Controller. JavaBonen vervullen de rol van model, keeping JSP zonder bedrijfslogica.

Model 1 plaatst de bedrijfslogica, gegevenstoegang en presentatie rechtstreeks in JSP-pagina's. Model 2 volgt het MVC-patroon: een Servlet fungeert als controller. JavaBeans vormen het model en JSP-bestanden renderen de weergave. Model 2 is de aanbevolen aanpak.

MVC verbetert de onderhoudbaarheid, testbaarheid en productiviteit van het team. Elke laag ontwikkelt zich onafhankelijk, de bedrijfslogica blijft buiten de JSP-bestanden, de navigatie is gecentraliseerd in de Servlet en unit tests dekken het Model zonder een webcontainer op te starten.

De browser verstuurt een formulier naar een Servlet. De Servlet valideert de invoer, maakt een gegevensbestand aan of werkt dit bij. JavaDe Bean wordt opgeslagen als een request-attribuut. Vervolgens wordt de controle doorgegeven aan een JSP-pagina, die de bean uitleest en het antwoord weergeeft.

AI-codeerassistenten analyseren verouderde Servlets- en JSP-bestanden, bijvoorbeeld...tracHet integreren van bedrijfslogica in overzichtelijke services, het genereren van Spring MVC-controllers en DTO's, en het produceren van JUnit tests. Dit versnelt de migratie van JSP Model 2 naar moderne frameworks met minder handmatige herschrijving.

AI-tools bouwen Spring MVC-controllers op en genereren een request map.pingZe stellen validatie-annotaties voor, schrijven Thymeleaf-templates en maken integratietests. Daarnaast sporen ze beveiligingsproblemen op, zoals ontbrekende CSRF-bescherming of onveilige invoerverwerking in controllermethoden.

Vat dit bericht samen met: