MVC JSP:ssä (Archirakenne)
⚡ Älykäs yhteenveto
JSP:n MVC erottelee sovellusasiat malli-, näkymä- ja ohjainkerroksiin, joissa JSP renderöi näkymän, Servlet toimii ohjaimena ja JavaBeanit kapseloivat mallin puhtaita, testattavia ja ylläpidettäviä verkkosovelluksia varten.

Mikä on MVC?
MVC on lyhenne sanoista Model-View-Controller. Se on ohjelmistosuunnittelumalli, joka jakaa sovelluksen kolmeen toisiinsa liittyvään tasoon: liiketoimintalogiikkaan, esitystapaan ja dataan. MVC:ssä:
- M tarkoittaa mallia
- V tarkoittaa View-toimintoa
- C tarkoittaa ohjainta
MVC on systemaattinen tapa rakentaa sovelluksia, joissa työnkulku alkaa View-tasolta. Käyttäjä tekee pyynnön, joka käsitellään Controller-tasolla ja lähetetään Model-tasolle tietojen lisäämistä tai hakemista varten. Model palauttaa sitten onnistumis- tai epäonnistumisvastauksen, jonka View renderöi käyttäjälle. MVC-arkkitehtuurikaavio on esitetty alla:

Miksi käyttää MVC:tä ArchiJSP-rakenne?
Ennen hyppyäping Kun tarkastellaan MVC:n toimintaa JSP:ssä, on hyödyllistä ymmärtää, miksi kehittäjät omaksuvat tämän mallin. Liiketoimintalogiikan, tietokantakutsujen ja HTML:n yhdistäminen yhden JSP-sivun sisällä tuottaa nopeasti ylläpitämätöntä spagettikoodia. MVC korjaa tämän antamalla jokaiselle osa-alueelle oman tason:
- Code helpompi lukea, koska jokaisella tiedostolla on yksi vastuualue.
- Tiimit voivat työskennellä näkymän, ohjaimen ja mallin parissa rinnakkain ilman konflikteja.
- Yksikkötestit kohdistuvat suoraan malliin koskematta JSP-renderöintiin.
- Vaihtaaping JSP-näkymän luominen JSON-vastaukselle tai eri mallipohjalle on yksinkertaista.
Kuinka MVC toimii JSP:ssä
JSP-pohjaisessa MVC-sovelluksessa jokainen kerros vastaa tiettyä Java teknologia. JSP-tiedostot renderöivät näkymän, Servlet toimii ohjaimena ja JavaBean-komponentit kapseloivat mallin. Alla olevat osiot selittävät kunkin kerroksen vastuut.
Mallin kerros
- Tämä on datakerros, joka sisältää järjestelmän liiketoimintalogiikan.
- Se koostuu kaikista sovelluksen tiedoista.
- Se edustaa myös sovelluksen tilaa.
- Se on rakennettu JavaPavut tai POJO:t, jotka yhdistyvät tietokanta.
- Ohjain kommunikoi mallin kanssa hakeakseen dataa ja välittää sen näkymäkerrokselle.
- Malli muodostaa yhteyden tietokantaan ja tallentaa tiedot sinne.
Näytä taso
- Tämä on sovelluksen esityskerros.
- Se koostuu HTML:stä, JSP:stä, CSS:stä ja JavaSkripti.
- Se näyttää yleensä sovelluksen käyttöliittymän.
- Se näyttää ohjaimelta noudetut tiedot, jotka puolestaan noutavat tietoja mallikerrosluokista.
- Näkymäkerros renderöi tietoja sovelluksen käyttöliittymässä ilman liiketoimintalogiikkaa.
Ohjainkerros
- Se toimii liitäntänä Viewin ja Modelin välillä.
- Se sieppaa kaikki pyynnöt, jotka tulevat View-kerroksesta.
- Se vastaanottaa pyynnöt näyttökerrokselta, käsittelee ne ja suorittaa pyynnön validoinnin.
- Pyyntö välitetään mallikerrokselle tietojen käsittelyä varten. Kun pyyntö on käsitelty, malli lähettää tuloksen takaisin ohjaimelle tarvittavien tietojen kanssa, jotka sitten näytetään näkymässä.
MVC:n edut Archirakenne
MVC:n edut ovat:
- Helppo huoltaa
- Helppo pidentää
- Helppo testata
- Navigointiohjaus on keskitetty
- Löyhä kytkentä kerrosten välillä tekee uudelleenfaktoroinnista turvallisempaa
- Useiden tiimin jäsenten rinnakkainen kehitys on mahdollista
Esimerkki JSP-sovellussuunnittelusta MVC:n kanssa Archirakenne
Tässä esimerkissä näytämme, kuinka MVC-arkkitehtuuria käytetään JSP-sovelluksessa.
- Otamme esimerkkinä lomakkeen, jossa on kaksi muuttujaa, ”sähköpostiosoite” ja ”salasana”, jotka edustavat Näytä-tasoamme.
- Kun käyttäjä syöttää sähköpostiosoitteen ja salasanan ja napsauttaa Lähetä-painiketta, toiminto välitetään Mvc_servletille, jossa sähköpostiosoite ja salasana välitetään.
- Mvc_servlet on Controller-kerros. Tässä Mvc_servletissä pyyntö lähetetään bean-objektille, joka toimii Model-kerroksena.
- Sähköpostiosoitteen ja salasanan arvot asetetaan bean-komponenttiin ja tallennetaan myöhempää käyttöä varten.
- Arvo noudetaan bean-komponentista ja näytetään View-tasolla.
Mvc_esimerkki.jsp (Näytä)
<%@ 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>
Koodin selitys:
Näytä taso:
Code Rivi 10–15: Tässä käytetään lomaketta, jossa on parametreina kaksi kenttää, ”sähköposti” ja ”salasana”. Pyyntö on välitettävä edelleen ohjaimelle Mvc_servlet.java, joka välitetään action-attribuutissa. HTTP-metodi, jonka kautta se välitetään, on POST.
Mvc_servlet.java (Ohjain)
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); } }
Koodin selitys:
Ohjainkerros:
Code Rivi 14: Mvc_servlet laajentaa HttpServletiä.
Code Rivi 26: Koska käytetty metodi on POST, pyyntö siirtyy Servletin doPost-metodiin, joka käsittelee pyynnön ja tallentaa sen bean-objektiin nimellä testobj.
Code Rivi 34: Request-objektia käyttämällä asetamme attribuutin ”gurubean”, jolle annetaan testobj-arvo.
Code Rivi 35: Tässä käytämme RequestDispatcher-objektia välittääksemme onnistumisviestin mvc_success.jsp-tiedostoon.
TestBean.java (malli)
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"; }
Koodin selitys:
Mallin kerros:
Code Rivi 7–17: Se sisältää sähköpostin ja salasanan hakijat ja asettajat, jotka ovat TestBean-luokan jäseniä.
Code Rivi 19–20: Se määrittää bean-luokan jäsenten sähköpostiosoitteen ja salasanan, jotka ovat String-tyyppiä.
Mvc_success.jsp (Tulosnäkymä)
<%@ 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>
Koodin selitys:
Code Rivi 12: Haemme attribuuttia käyttämällä Servletin doPost-metodissa asetettua pyyntöobjektia.
Code Rivi 13: Tulostamme bean-objektiin tallennetun tervetuloviestin ja sähköpostiosoitteen.
ulostulo
Kun suoritat yllä olevan koodin, saat seuraavan tulosteen:
Kun avaat tiedoston mvc_example.jsp, saat näkyviin lomakkeen, jossa on sähköpostiosoite- ja salasanakentät sekä Lähetä-painike.
Kun olet syöttänyt sähköpostiosoitteen ja salasanan lomakkeeseen ja painanut Lähetä:
Kun olet napsauttanut Lähetä-painiketta, tuloste näkyy alla olevan kaltaisena:
Kun syötät sähköpostiosoitteen ja salasanan näytölle ja napsautat Lähetä, tiedot tallennetaan TestBeaniin. TestBeanista ne noudetaan seuraavalla näytöllä onnistumisviestin näyttämiseksi. JSP esittää datan ja tarjoaa näkymän, kun taas Servlet toimii ohjaimena ja JavaBean toimii mallina. Tärkein liiketoimintalogiikka sisältyy mallikerrokseen.


