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.

  • ๐Ÿงฑ Dela upp problemen: Modellen innehรฅller data och affรคrslogik, View renderar anvรคndargrรคnssnittet och Controllern dirigerar fรถrfrรฅgningar mellan dem.
  • ๐Ÿ“ JSP-roll: JSP-sidor renderar dynamisk markup fรถr View-lagret medan en Servlet hanterar fรถrfrรฅgningsbearbetning pรฅ Controller-lagret.
  • ๐Ÿ”€ Begรคranflรถde: Webblรคsaren skickar in ett formulรคr, Servlet validerar indata, fyller i ett JavaBean, och vidarebefordrar sedan kontrollen till en JSP-vy fรถr svar.
  • โœ… Underhรฅllbarhet vinner: MVC-arkitekturen i JSP gรถr det enklare att underhรฅlla, utรถka, enhetstesta och navigera i webbapplikationer centralt.
  • ๐Ÿงช Arbetsexempel: Ett inloggningsformulรคr skickas till Mvc_servlet, som lagrar e-postadress och lรถsenord i TestBean, och vidarebefordras sedan till mvc_success.jsp.
  • ๐Ÿค– AI-modernisering: AI-assistenter hjรคlper nu till att omstrukturera รคldre JSP MVC-kod till Spring MVC, vilket genererar kontroller, DTO:er och tester pรฅ begรคran.

MVC i JSP (Architecture)

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:

MVC Architecture
MVC ArchiTecture Diagram

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:

JSP Application Design

Efter att du klickat pรฅ Skicka visas resultatet enligt nedan:

JSP Application Design

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.

Vanliga frรฅgor

MVC i JSP รคr ett designmรถnster som delar upp en webbapplikation i tre lager: Modell (data och affรคrslogik), Vy (JSP-sidor som renderar anvรคndargrรคnssnittet) och Kontroller (en servlet som bearbetar fรถrfrรฅgningar och dirigerar svar).

JSP tillhรถr frรคmst View-lagret eftersom det renderar dynamisk HTML fรถr anvรคndaren. I JSP Model 2-mรถnstret hanterar en Servlet Controller-rollen och JavaBรถnor hanterar modellrollen, keeping JSP fri frรฅn affรคrslogik.

Modell 1 placerar affรคrslogik, dataรฅtkomst och presentation direkt inuti JSP-sidor. Modell 2 fรถljer MVC: en Servlet fungerar som Controller, JavaBรถnor bildar modellen och JSP-filer renderar vyn. Modell 2 รคr den rekommenderade metoden.

MVC fรถrbรคttrar underhรฅllbarhet, testbarhet och teamproduktivitet. Varje lager utvecklas oberoende, affรคrslogik hรฅlls borta frรฅn JSP-filer, navigering รคr centraliserad i Servleten och enhetstester tรคcker modellen utan att en webbcontainer ska startas.

Webblรคsaren skickar ett formulรคr till en Servlet. Servleten validerar indata, skapar eller uppdaterar en JavaBean och lagrar den som ett request-attribut. Den vidarebefordrar sedan kontrollen till en JSP-sida, som lรคser bรถnan och renderar svaret.

AI-kodningsassistenter analyserar รคldre Servlets och JSP-filer, t.ex.tracbรคdda in affรคrslogik i rena tjรคnster, generera Spring MVC-kontroller och DTO:er och producera JUnit tester. Detta accelererar migreringen frรฅn JSP Model 2 till moderna ramverk med mindre manuell omskrivning.

AI-verktyg scaffold Spring MVC-kontroller, generera fรถrfrรฅgningskartapings, fรถreslรฅ valideringsannoteringar, skriva Thymeleaf-mallar och skapa integrationstester. De upptรคcker รคven sรคkerhetsproblem som saknat CSRF-skydd eller osรคker inmatningshantering i kontrollmetoder.

Sammanfatta detta inlรคgg med: