MVC w JSP (Archistruktura)

โšก Inteligentne podsumowanie

MVC w JSP rozdziela zagadnienia aplikacji na warstwy modelu, widoku i kontrolera, gdzie JSP renderuje widok, serwlet peล‚ni rolฤ™ kontrolera, a JavaBeany hermetyzujฤ… model, co pozwala na tworzenie czystych, testowalnych i ล‚atwych w utrzymaniu aplikacji internetowych.

  • ๐Ÿงฑ Oddzielenie obaw: Model przechowuje dane i logikฤ™ biznesowฤ…, widok renderuje interfejs uลผytkownika, a kontroler kieruje ลผฤ…daniami miฤ™dzy nimi.
  • ๐Ÿ“ Rola JSP: Strony JSP renderujฤ… dynamiczne znaczniki dla warstwy widoku, podczas gdy serwlet obsล‚uguje przetwarzanie ลผฤ…daล„ na warstwie kontrolera.
  • ๐Ÿ”€ Przepล‚yw ลผฤ…daล„: Przeglฤ…darka przesyล‚a formularz, serwlet weryfikuje dane wejล›ciowe, wypeล‚nia formularz JavaNastฤ™pnie Bean przekazuje sterowanie do widoku JSP w celu uzyskania odpowiedzi.
  • โœ… Zalety utrzymywalnoล›ci: Architektura MVC w JSP uล‚atwia centralne utrzymanie, rozszerzanie, testowanie jednostkowe i nawigowanie po aplikacjach internetowych.
  • ๐Ÿงช Przykล‚ad dziaล‚ania: Formularz logowania wysyล‚a dane do Mvc_servlet, ktรณry przechowuje adres e-mail i hasล‚o w TestBean, a nastฤ™pnie przekazuje je do mvc_success.jsp.
  • ๐Ÿค– Modernizacja AI: Asystenci AI pomagajฤ… teraz w refaktoryzacji starego kodu JSP MVC do Spring MVC, generujฤ…c kontrolery, DTO i testy na ลผฤ…danie.

MVC w JSP (Archistruktura)

Co to jest MVC?

MVC to skrรณt od Model-View-Controller (model-widok-kontroler). Jest to wzorzec projektowania oprogramowania, ktรณry dzieli aplikacjฤ™ na trzy poล‚ฤ…czone ze sobฤ… warstwy: logikฤ™ biznesowฤ…, prezentacjฤ™ i dane. W MVC:

  • M oznacza model
  • V oznacza widok
  • C oznacza kontroler

MVC to systematyczny sposรณb tworzenia aplikacji, w ktรณrym przepล‚yw rozpoczyna siฤ™ w warstwie widoku. ลปฤ…danie jest zgล‚aszane przez uลผytkownika, przetwarzane w warstwie kontrolera i wysyล‚ane do warstwy modelu w celu wstawienia lub pobrania danych. Model zwraca nastฤ™pnie odpowiedลบ o powodzeniu lub niepowodzeniu, ktรณrฤ… widok generuje dla uลผytkownika. Diagram architektury MVC przedstawiono poniลผej:

MVC Architektura
MVC ArchiSchemat tecture

Dlaczego warto uลผywaฤ‡ MVC Archistruktura w JSP?

Przed skokiemping Zrozumienie dziaล‚ania MVC w JSP pomaga zrozumieฤ‡, dlaczego programiล›ci stosujฤ… ten wzorzec. Mieszanie logiki biznesowej, wywoล‚aล„ bazy danych i kodu HTML na jednej stronie JSP szybko prowadzi do nieutrzymywalnego kodu spaghetti. MVC rozwiฤ…zuje ten problem, nadajฤ…c kaลผdemu problemowi osobnฤ… warstwฤ™:

  • Code staje siฤ™ ล‚atwiejsze do odczytania, poniewaลผ kaลผdy plik ma jednฤ… odpowiedzialnoล›ฤ‡.
  • Zespoล‚y mogฤ… pracowaฤ‡ rรณwnolegle nad widokiem, kontrolerem i modelem bez konfliktรณw.
  • Testy jednostkowe sฤ… skierowane bezpoล›rednio do modelu i nie majฤ… wpล‚ywu na renderowanie JSP.
  • Zamianaping Widok JSP dla odpowiedzi JSON lub innego silnika szablonรณw jest prosty.

Jak dziaล‚a MVC w JSP

W aplikacji MVC opartej na JSP kaลผda warstwa jest mapowana na okreล›lonฤ… warstwฤ™ Java technologia. Pliki JSP renderujฤ… widok, serwlet peล‚ni rolฤ™ kontrolera, a JavaModel jest hermetyzowany przez ziarna. Poniลผsze sekcje wyjaล›niajฤ… obowiฤ…zki kaลผdej warstwy.

Warstwa modelu

  • Jest to warstwa danych zawierajฤ…ca logikฤ™ biznesowฤ… systemu.
  • Zawiera wszystkie dane aplikacji.
  • Reprezentuje rรณwnieลผ stan aplikacji.
  • Jest zbudowany z JavaFasole lub obiekty POJO, ktรณre ล‚ฤ…czฤ… siฤ™ z baza danych.
  • Kontroler komunikuje siฤ™ z modelem w celu pobrania danych i przekazuje je do warstwy widoku.
  • Model ล‚ฤ…czy siฤ™ z bazฤ… danych i zapisuje w niej dane.

Wyล›wietl warstwฤ™

  • To jest warstwa prezentacyjna aplikacji.
  • Skล‚ada siฤ™ z HTML, JSP, CSS i JavaScenariusz.
  • Zwykle przedstawia interfejs uลผytkownika aplikacji.
  • Wyล›wietla dane pobrane z Kontrolera, ktรณry z kolei pobiera dane z klas warstwy modelu.
  • Warstwa widoku renderuje dane w interfejsie uลผytkownika aplikacji bez zawierania logiki biznesowej.

Warstwa kontrolera

  • Dziaล‚a jako interfejs pomiฤ™dzy widokiem i modelem.
  • Przechwytuje wszystkie ลผฤ…dania przychodzฤ…ce z warstwy widoku.
  • Otrzymuje ลผฤ…dania z warstwy widoku, przetwarza je i przeprowadza walidacjฤ™ ลผฤ…dania.
  • ลปฤ…danie jest przekazywane do warstwy modelu w celu przetworzenia danych. Po przetworzeniu ลผฤ…dania model odsyล‚a wynik do kontrolera wraz z wymaganymi informacjami, ktรณre nastฤ™pnie sฤ… wyล›wietlane w widoku.

Zalety MVC Architektura

Zalety MVC to:

  • ลatwe w utrzymaniu
  • ลatwe do przedล‚uลผenia
  • ลatwy do przetestowania
  • Sterowanie nawigacjฤ… jest scentralizowane
  • Luลบne powiฤ…zanie miฤ™dzy warstwami zwiฤ™ksza bezpieczeล„stwo refaktoryzacji
  • Moลผliwy jest rรณwnolegล‚y rozwรณj przez wielu czล‚onkรณw zespoล‚u

Przykล‚ad projektowania aplikacji JSP z wykorzystaniem MVC Architektura

W tym przykล‚adzie pokaลผemy, jak wykorzystaฤ‡ architekturฤ™ MVC w aplikacji JSP.

  • Bierzemy przykล‚ad formularza z dwiema zmiennymi: โ€že-mailโ€ i โ€žhasล‚oโ€, ktรณre reprezentujฤ… naszฤ… warstwฤ™ widoku.
  • Gdy uลผytkownik wprowadzi adres e-mail i hasล‚o i kliknie Wyล›lij, akcja zostanie przekazana do Mvc_servlet, gdzie zostanฤ… przekazane adres e-mail i hasล‚o.
  • Mvc_servlet to warstwa kontrolera. W Mvc_servlet ลผฤ…danie jest wysyล‚ane do obiektu bean, ktรณry peล‚ni rolฤ™ warstwy modelu.
  • Wartoล›ci adresu e-mail i hasล‚a sฤ… wpisywane do ziarna i przechowywane do przyszล‚ego uลผytku.
  • Wartoล›ฤ‡ jest pobierana z ziarna i wyล›wietlana w warstwie widoku.

Mvc_example.jsp (Widok)

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

Wyjaล›nienie kodu:

Zobacz warstwฤ™:

Code Linia 10-15: Tutaj bierzemy formularz, ktรณry ma dwa pola jako parametry: โ€žemailโ€ i โ€žhasล‚oโ€, a to ลผฤ…danie musi zostaฤ‡ przekazane do kontrolera Mvc_servlet.java, ktรณry jest przekazywany w atrybucie akcji. Metodฤ… HTTP, za pomocฤ… ktรณrej jest ono przekazywane, jest POST.

Mvc_servlet.java (Kontroler)

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

}

Wyjaล›nienie kodu:

Warstwa kontrolera:

Code Linia 14: Mvc_servlet rozszerza HttpServlet.

Code Linia 26: Poniewaลผ uลผytฤ… metodฤ… jest POST, ลผฤ…danie trafia do metody doPost serwletu, ktรณry przetwarza ลผฤ…danie i zapisuje je w obiekcie bean jako testobj.

Code Linia 34: Uลผywajฤ…c obiektu ลผฤ…dania, ustawiamy atrybut โ€žgurubeanโ€, ktรณremu przypisujemy wartoล›ฤ‡ testobj.

Code Linia 35: Tutaj uลผyliล›my obiektu RequestDispatcher do przekazania komunikatu o powodzeniu do pliku 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";


}

Wyjaล›nienie kodu:

Warstwa modelu:

Code Linia 7-17: Zawiera metody pobierajฤ…ce i ustawiajฤ…ce adres e-mail i hasล‚o, ktรณre sฤ… czล‚onkami klasy TestBean.

Code Linia 19-20: Definiuje adres e-mail i hasล‚o czล‚onka typu String w klasie bean.

Mvc_success.jsp (Widok wynikรณw)

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

Wyjaล›nienie kodu:

Code Linia 12: Pobieramy atrybut przy uลผyciu obiektu ลผฤ…dania ustawionego w metodzie doPost serwletu.

Code Linia 13: Drukujemy wiadomoล›ฤ‡ powitalnฤ… i identyfikator e-mail, ktรณry zostaล‚ zapisany w obiekcie bean.

Wydajnoล›ฤ‡

Po wykonaniu powyลผszego kodu otrzymasz nastฤ™pujฤ…cy wynik:

Po otwarciu pliku mvc_example.jsp pojawi siฤ™ formularz z polami adresu e-mail i hasล‚a oraz przyciskiem Wyล›lij.

Po wpisaniu adresu e-mail i hasล‚a do formularza i klikniฤ™ciu przycisku Przeล›lij:

Projekt aplikacji JSP

Po klikniฤ™ciu przycisku Wyล›lij wynik jest wyล›wietlany poniลผej:

Projekt aplikacji JSP

Po wpisaniu adresu e-mail i hasล‚a na ekranie i klikniฤ™ciu โ€žPrzeล›lijโ€ dane zostanฤ… zapisane w TestBean. Z TestBean zostanฤ… one pobrane na nastฤ™pnym ekranie, aby wyล›wietliฤ‡ komunikat o pomyล›lnym zakoล„czeniu. JSP peล‚ni rolฤ™ prezentowania danych i zapewniania widoku, podczas gdy serwlet dziaล‚a jako kontroler i JavaBean sล‚uลผy jako model. Gล‚รณwna logika biznesowa znajduje siฤ™ w warstwie modelu.

FAQ

MVC w JSP to wzorzec projektowy dzielฤ…cy aplikacjฤ™ internetowฤ… na trzy warstwy: Model (dane i logika biznesowa), Widok (strony JSP renderujฤ…ce interfejs uลผytkownika) i Kontroler (serwlet przetwarzajฤ…cy ลผฤ…dania i kierujฤ…cy odpowiedziami).

JSP naleลผy przede wszystkim do warstwy widoku, poniewaลผ renderuje dynamiczny kod HTML dla uลผytkownika. W modelu JSP 2 serwlet peล‚ni rolฤ™ kontrolera i JavaFasolki peล‚niฤ… rolฤ™ modelek,ping JSP wolny od logiki biznesowej.

Model 1 umieszcza logikฤ™ biznesowฤ…, dostฤ™p do danych i prezentacjฤ™ bezpoล›rednio na stronach JSP. Model 2 opiera siฤ™ na MVC: serwlet peล‚ni rolฤ™ kontrolera, JavaBeany tworzฤ… Model, a pliki JSP renderujฤ… Widok. Zalecanym podejล›ciem jest Model 2.

MVC poprawia ล‚atwoล›ฤ‡ utrzymania, testowalnoล›ฤ‡ i produktywnoล›ฤ‡ zespoล‚u. Kaลผda warstwa rozwija siฤ™ niezaleลผnie, logika biznesowa nie jest zawarta w plikach JSP, nawigacja jest scentralizowana w serwlecie, a testy jednostkowe obejmujฤ… model bez koniecznoล›ci tworzenia kontenera webowego.

Przeglฤ…darka przesyล‚a formularz do serwletu. Serwlet weryfikuje dane wejล›ciowe, tworzy lub aktualizuje JavaBean i zapisuje go jako atrybut ลผฤ…dania. Nastฤ™pnie przekazuje sterowanie do strony JSP, ktรณra odczytuje beana i renderuje odpowiedลบ.

Asystenci kodowania AI analizujฤ… starsze serwlety i pliki JSP, np.tracosadzaฤ‡ logikฤ™ biznesowฤ… w czystych usล‚ugach, generowaฤ‡ kontrolery Spring MVC i DTO oraz produkowaฤ‡ JUnit Testy. Przyspiesza to migracjฤ™ z JSP Model 2 do nowoczesnych frameworkรณw, ograniczajฤ…c koniecznoล›ฤ‡ rฤ™cznego przepisywania.

Narzฤ™dzia AI wspierajฤ… kontrolery Spring MVC i generujฤ… mapฤ™ ลผฤ…daล„pings, sugerujฤ… adnotacje walidacyjne, piszฤ… szablony Thymeleaf i tworzฤ… testy integracyjne. Wykrywajฤ… rรณwnieลผ problemy bezpieczeล„stwa, takie jak brak ochrony CSRF lub niebezpieczna obsล‚uga danych wejล›ciowych w metodach kontrolera.

Podsumuj ten post nastฤ™pujฤ…co: