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.

  • ๐Ÿงฑ Adskillelse af bekymringer: Modellen indeholder data og forretningslogik, View gengiver brugergrรฆnsefladen, og Controlleren ruter anmodninger mellem dem.
  • ๐Ÿ“ JSP-rolle: JSP-sider gengiver dynamisk markup for View-laget, mens en Servlet hรฅndterer anmodningsbehandling pรฅ Controller-laget.
  • ๐Ÿ”€ Anmodningsflow: Browseren sender en formular, Servlet validerer input, udfylder en JavaBean, og videresender derefter kontrollen til en JSP-visning for svar.
  • โœ… Vedligeholdelse vinder: MVC-arkitekturen i JSP gรธr det nemmere at vedligeholde, udvide, enhedstest og navigere i webapplikationer centralt.
  • ๐Ÿงช Arbejdseksempel: En loginformular sendes til Mvc_servlet, som gemmer e-mail og adgangskode i TestBean, og derefter videresender den til mvc_success.jsp.
  • ๐Ÿค– AI-modernisering: AI-assistenter hjรฆlper nu med at omstrukturere รฆldre JSP MVC-kode til Spring MVC og generere controllere, DTO'er og tests on-demand.

MVC i JSP (Architecture)

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:

MVC Architecture
MVC Architecture diagram

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:

JSP applikationsdesign

Efter at have klikket pรฅ Send, vises outputtet som fรธlger:

JSP applikationsdesign

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.

Ofte Stillede Spรธrgsmรฅl

MVC i JSP er et designmรธnster, der opdeler en webapplikation i tre lag: Model (data og forretningslogik), View (JSP-sider, der gengiver brugergrรฆnsefladen) og Controller (en Servlet, der behandler anmodninger og ruter svar).

JSP tilhรธrer primรฆrt View-laget, fordi det gengiver dynamisk HTML for brugeren. I JSP Model 2-mรธnsteret hรฅndterer en Servlet Controller-rollen og JavaBรธnner hรฅndterer modelrollen, keeping JSP fri for forretningslogik.

Model 1 placerer forretningslogik, dataadgang og prรฆsentation direkte pรฅ JSP-sider. Model 2 fรธlger MVC: en Servlet fungerer som Controller, JavaBeans danner modellen, og JSP-filer gengiver visningen. Model 2 er den anbefalede fremgangsmรฅde.

MVC forbedrer vedligeholdelse, testbarhed og teamproduktivitet. Hvert lag udvikler sig uafhรฆngigt, forretningslogik holdes ude af JSP-filer, navigation er centraliseret i Servlet'en, og enhedstest dรฆkker modellen uden at oprette en webcontainer.

Browseren sender en formular til en Servlet. Servlet'en validerer input, opretter eller opdaterer en JavaBean og gemmer den som en request-attribut. Den videresender derefter kontrollen til en JSP-side, som lรฆser bean'en og gengiver svaret.

AI-kodningsassistenter analyserer รฆldre Servlets og JSP-filer, f.eks.tracintegrere forretningslogik i rene tjenester, generere Spring MVC-controllere og DTO'er og producere JUnit tests. Dette fremskynder migreringen fra JSP Model 2 til moderne frameworks med mindre manuel omskrivning.

AI-vรฆrktรธjer scaffold Spring MVC-controllere, generer anmodningskortpings, foreslรฅ valideringsannotationer, skrive Thymeleaf-skabeloner og oprette integrationstests. De registrerer ogsรฅ sikkerhedsproblemer sรฅsom manglende CSRF-beskyttelse eller usikker inputhรฅndtering i controllermetoder.

Opsummer dette indlรฆg med: