MVC v JSP (Architecture)

โšก Chytrรฉ shrnutรญ

MVC v JSP rozdฤ›luje aplikaฤnรญ zรกleลพitosti na vrstvy Model, View a Controller, kde JSP vykresluje View, Servlet funguje jako Controller a JavaBeany zapouzdล™ujรญ model pro ฤistรฉ, testovatelnรฉ a udrลพovatelnรฉ webovรฉ aplikace.

  • ๐Ÿงฑ Rozdฤ›lenรญ obav: Model uchovรกvรก data a obchodnรญ logiku, View vykresluje uลพivatelskรฉ rozhranรญ a Controller smฤ›ruje poลพadavky mezi nimi.
  • ๐Ÿ“ Role JSP: Strรกnky JSP vykreslujรญ dynamickรฉ znaฤky pro vrstvu View, zatรญmco Servlet zpracovรกvรก poลพadavky na vrstvฤ› Controller.
  • ๐Ÿ”€ Tok poลพadavku: Prohlรญลพeฤ odeลกle formulรกล™, Servlet ovฤ›ล™รญ vstupy, naplnรญ JavaBean a potรฉ pล™eposรญlรก ล™รญzenรญ do JSP zobrazenรญ pro odpovฤ›ฤ.
  • (Tj. Vรฝhody รบdrลพby: Architektura MVC v JSP usnadลˆuje centrรกlnรญ รบdrลพbu, rozลกiล™ovรกnรญ, jednotkovรฉ testovรกnรญ a navigaci webovรฝch aplikacรญ.
  • ๐Ÿงช Pracovnรญ pล™รญklad: Pล™ihlaลกovacรญ formulรกล™ se odeลกle do servletu Mvc_servlet, kterรฝ uklรกdรก e-mail a heslo do TestBeanu, a potรฉ se pล™esmฤ›ruje do mvc_success.jsp.
  • ๐Ÿค– Modernizace umฤ›lรฉ inteligence: Asistenti umฤ›lรฉ inteligence nynรญ pomรกhajรญ s refaktorovรกnรญm starลกรญho kรณdu JSP MVC do Spring MVC a generujรญ controllery, DTO a testy na vyลพรกdรกnรญ.

MVC v JSP (Architecture)

Co je MVC?

MVC je zkratka pro Model-View-Controller. Jednรก se o softwarovรฝ nรกvrhovรฝ vzor, โ€‹โ€‹kterรฝ rozdฤ›luje aplikaci do tล™รญ vzรกjemnฤ› propojenรฝch vrstev: obchodnรญ logiky, prezentace a dat. V MVC:

  • M zkratka pro Model
  • V zkratka pro View
  • C zkratka pro Controller

MVC je systematickรฝ zpลฏsob tvorby aplikacรญ, kde proces zaฤรญnรก na vrstvฤ› View. Poลพadavek je vyvolรกn uลพivatelem, zpracovรกn ve vrstvฤ› Controller a odeslรกn do vrstvy Model pro vloลพenรญ nebo naฤtenรญ dat. Model potรฉ vrรกtรญ odpovฤ›ฤ o รบspฤ›chu nebo neรบspฤ›chu, kterou View vykreslรญ uลพivateli. Schรฉma architektury MVC je znรกzornฤ›no nรญลพe:

MVC Architecture
MVC Architecture Diagram

Proฤ pouลพรญvat MVC Architextura v JSP?

Pล™ed skokemping Abychom pochopili, jak MVC funguje v JSP, je uลพiteฤnรฉ pochopit, proฤ vรฝvojรกล™i tento vzorec pouลพรญvajรญ. Mรญchรกnรญ obchodnรญ logiky, volรกnรญ databรกze a HTML v rรกmci jednรฉ JSP strรกnky rychle vede k neudrลพovatelnรฉmu โ€žลกpagetovรฉmuโ€œ kรณdu. MVC to ล™eลกรญ tรญm, ลพe kaลพdรฉmu aspektu pล™idฤ›luje vlastnรญ vrstvu:

  • Code stรกvรก se snadnฤ›ji ฤitelnรฝm, protoลพe kaลพdรฝ soubor mรก jednu odpovฤ›dnost.
  • Tรฝmy mohou pracovat na View, Controller a Model paralelnฤ› bez konfliktลฏ.
  • Jednotkovรฉ testy cรญlรญ pล™รญmo na model, bez dotyku s vykreslovรกnรญm JSP.
  • vรฝmฤ›naping JSP View pro odpovฤ›ฤ JSON nebo jinรฝ ลกablonovacรญ engine je pล™รญmoฤarรฝ.

Jak funguje MVC v JSP

V aplikaci MVC zaloลพenรฉ na JSP se kaลพdรก vrstva mapuje na specifickรฝ Java technologie. Soubory JSP vykreslujรญ zobrazenรญ (View), Servlet funguje jako kontroler (Controller) a JavaBeany zapouzdล™ujรญ model. Nรกsledujรญcรญ ฤรกsti vysvฤ›tlujรญ odpovฤ›dnosti jednotlivรฝch vrstev.

Modelovรก vrstva

  • Toto je datovรก vrstva, kterรก obsahuje obchodnรญ logiku systรฉmu.
  • Obsahuje vลกechna data aplikace.
  • Pล™edstavuje takรฉ stav aplikace.
  • Je postaven z JavaBeany nebo POJO, kterรฉ se pล™ipojujรญ k databรกze.
  • Kontroler komunikuje s modelem, aby naฤetl data a pล™eposรญlal je do vrstvy zobrazenรญ.
  • Model se pล™ipojรญ k databรกzi a uloลพรญ do nรญ data.

Zobrazit vrstvu

  • Toto je prezentaฤnรญ vrstva aplikace.
  • Sklรกdรก se z HTML, JSP, CSS a JavaSkript.
  • Obvykle zobrazuje uลพivatelskรฉ rozhranรญ aplikace.
  • Zobrazuje data naฤtenรก z Controlleru, kterรฝ zase naฤรญtรก data z tล™รญd vrstev modelu.
  • Vrstva View vykresluje data v uลพivatelskรฉm rozhranรญ aplikace bez nutnosti pouลพรญvat obchodnรญ logiku.

Vrstva ovladaฤe

  • Funguje jako rozhranรญ mezi pohledem a modelem.
  • Zachycuje vลกechny poลพadavky, kterรฉ pล™ichรกzejรญ z vrstvy View.
  • Pล™ijรญmรก poลพadavky z vrstvy View, zpracovรกvรก je a provรกdรญ validaci poลพadavku.
  • Poลพadavek je pล™eposรญlรกn do vrstvy Model ke zpracovรกnรญ dat. Jakmile je poลพadavek zpracovรกn, Model odeลกle vรฝsledek zpฤ›t do Controlleru s poลพadovanรฝmi informacemi, kterรฉ se nรกslednฤ› zobrazรญ v View.

Vรฝhody MVC Architecture

Vรฝhody MVC jsou:

  • Snadno se udrลพuje
  • Snadno se prodluลพuje
  • Snadno testovatelnรฉ
  • Ovlรกdรกnรญ navigace je centralizovanรฉ
  • Volnรก vazba mezi vrstvami zvyลกuje bezpeฤnost refaktoringu
  • Paralelnรญ vรฝvoj je moลพnรฝ pro vรญce ฤlenลฏ tรฝmu

Pล™รญklad nรกvrhu aplikace JSP s MVC Architecture

V tomto pล™รญkladu si ukรกลพeme, jak pouลพรญt architekturu MVC v JSP aplikaci.

  • Vezmeme si pล™รญklad formulรกล™e se dvฤ›ma promฤ›nnรฝmi, โ€že-mailโ€œ a โ€žhesloโ€œ, kterรฉ pล™edstavujรญ naลกi vrstvu zobrazenรญ.
  • Jakmile uลพivatel zadรก e-mail a heslo a klikne na tlaฤรญtko Odeslat, akce se pล™edรก do servletu Mvc_servlet, kde se pล™edรกvajรญ e-mail a heslo.
  • Mvc_servlet je vrstva Controller. Zde v Mvc_servlet je poลพadavek odeslรกn objektu bean, kterรฝ funguje jako vrstva Model.
  • Hodnoty e-mailu a hesla jsou nastaveny do beanu a uloลพeny pro dalลกรญ pouลพitรญ.
  • Z beanu se naฤte hodnota a zobrazรญ se ve vrstvฤ› View.

Mvc_example.jsp (Zobrazit)

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

Vysvฤ›tlenรญ kรณdu:

Zobrazit vrstvu:

Code ล˜รกdek 10โ€“15: Zde bereme formulรกล™, kterรฝ mรก jako parametry dvฤ› pole, โ€že-mailโ€œ a โ€žhesloโ€œ, a tento poลพadavek je tล™eba pล™eposlat kontroleru Mvc_servlet.java, kterรฝ je pล™edรกvรกn v atributu action. HTTP metoda, kterou je pล™edรกvรกn, je POST.

Mvc_servlet.java (kontrolรฉr)

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);
	}

}

Vysvฤ›tlenรญ kรณdu:

Vrstva ล™รญdicรญ jednotky:

Code ล˜รกdek 14: Mvc_servlet rozลกiล™uje HttpServlet.

Code ล˜รกdek 26: Protoลพe se pouลพรญvรก metoda POST, poลพadavek vstupuje do metody doPost servletu, kterรก poลพadavek zpracuje a uloลพรญ do objektu bean jako testobj.

Code ล˜รกdek 34: Pomocรญ objektu request nastavujeme atribut โ€žgurubeanโ€œ, kterรฉmu je pล™iล™azena hodnota testobj.

Code ล˜รกdek 35: Zde pouลพรญvรกme objekt RequestDispatcher k pล™eposlรกnรญ zprรกvy o รบspฤ›chu do 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";


}

Vysvฤ›tlenรญ kรณdu:

Modelovรก vrstva:

Code ล˜รกdek 7โ€“17: Obsahuje metody pro zรญskรกvรกnรญ a nastavovรกnรญ e-mailu a hesla, kterรฉ jsou ฤleny tล™รญdy TestBean.

Code ล˜รกdek 19โ€“20: Definuje e-mail a heslo ฤlenลฏ typu String ve tล™รญdฤ› bean.

Mvc_success.jsp (Zobrazenรญ vรฝsledkลฏ)

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

Vysvฤ›tlenรญ kรณdu:

Code ล˜รกdek 12: Atribut naฤรญtรกme pomocรญ objektu poลพadavku, kterรฝ byl nastaven v metodฤ› doPost servletu.

Code ล˜รกdek 13: Vypรญลกeme uvรญtacรญ zprรกvu a e-mailovou adresu, kterรก byla uloลพena v objektu bean.

Vรฝstup

Kdyลพ spustรญte vรฝลกe uvedenรฝ kรณd, zรญskรกte nรกsledujรญcรญ vรฝstup:

Po otevล™enรญ souboru mvc_example.jsp se zobrazรญ formulรกล™ s poli pro e-mail a heslo a tlaฤรญtkem Odeslat.

Jakmile do formulรกล™e zadรกte e-mail a heslo a kliknete na tlaฤรญtko Odeslat:

Nรกvrh aplikace JSP

Po kliknutรญ na tlaฤรญtko Odeslat se vรฝstup zobrazรญ nรญลพe:

Nรกvrh aplikace JSP

Kdyลพ na obrazovce zadรกte e-mail a heslo a kliknete na tlaฤรญtko Odeslat, รบdaje se uloลพรญ do TestBeanu. Z TestBeanu se naฤtou na dalลกรญ obrazovce a zobrazรญ se zprรกva o รบspฤ›chu. JSP hraje roli prezentace dat a poskytovรกnรญ zobrazenรญ (View), zatรญmco Servlet funguje jako Controller a JavaBean slouลพรญ jako model. Hlavnรญ obchodnรญ logika je obsaลพena ve vrstvฤ› modelu.

Nejฤastฤ›jลกรญ dotazy

MVC v JSP je nรกvrhovรฝ vzor, โ€‹โ€‹kterรฝ rozdฤ›luje webovou aplikaci do tล™รญ vrstev: Model (data a obchodnรญ logika), View (strรกnky JSP, kterรฉ vykreslujรญ uลพivatelskรฉ rozhranรญ) a Controller (servlet, kterรฝ zpracovรกvรก poลพadavky a smฤ›ruje odpovฤ›di).

JSP patล™รญ primรกrnฤ› do vrstvy View, protoลพe vykresluje dynamickรฝ HTML pro uลพivatele. Ve vzoru JSP Model 2 Servlet zpracovรกvรก roli Controlleru a JavaBeany zvlรกdajรญ roli Modelu, keeping JSP bez obchodnรญ logiky.

Model 1 umisลฅuje obchodnรญ logiku, pล™รญstup k datลฏm a prezentaci pล™รญmo do strรกnek JSP. Model 2 navazuje na MVC: Servlet funguje jako Controller, JavaModel tvoล™รญ beany a JSP soubory vykreslujรญ zobrazenรญ. Doporuฤenรฝm pล™รญstupem je Model 2.

MVC zlepลกuje udrลพovatelnost, testovatelnost a produktivitu tรฝmu. Kaลพdรก vrstva se vyvรญjรญ nezรกvisle, obchodnรญ logika zลฏstรกvรก mimo soubory JSP, navigace je centralizovanรก v servletu a jednotkovรฉ testy pokrรฝvajรญ model bez nutnosti spouลกtฤ›t webovรฝ kontejner.

Prohlรญลพeฤ odeลกle formulรกล™ do servletu. Servlet ovฤ›ล™uje vstupy, vytvรกล™รญ nebo aktualizuje JavaBean a uloลพรญ jej jako atribut poลพadavku. Potรฉ pล™epoลกle ล™รญzenรญ na strรกnku JSP, kterรก pล™eฤte bean a vykreslรญ odpovฤ›ฤ.

Asistenti kรณdovรกnรญ s umฤ›lou inteligencรญ analyzujรญ starลกรญ servlety a soubory JSP, napล™.tracVklรกdat obchodnรญ logiku do ฤistรฝch sluลพeb, generovat Spring MVC kontrolery a DTO a vytvรกล™et JUnit testy. To urychluje migraci z JSP Model 2 na modernรญ frameworky s menลกรญm ruฤnรญm pล™episovรกnรญm.

Nรกstroje AI scaffold Spring MVC controllery, generovรกnรญ mapy poลพadavkลฏpings, navrhujรญ anotace validace, pรญลกรญ ลกablony Thymeleaf a vytvรกล™ejรญ integraฤnรญ testy. Takรฉ detekujรญ bezpeฤnostnรญ problรฉmy, jako je chybฤ›jรญcรญ ochrana CSRF nebo nebezpeฤnรฉ zpracovรกnรญ vstupลฏ v metodรกch kontroleru.

Shrลˆte tento pล™รญspฤ›vek takto: