MVC v JSP (Architecture)

Co je MVC?

MVC je architektura, která odděluje obchodní logiku, prezentaci a data. V MVC,

  • M znamená Model
  • V znamená View
  • C znamená controller.

MVC je systematický způsob použití aplikace, kde tok začíná z pohledové vrstvy, kde je požadavek vyvolán a zpracován ve vrstvě řadiče a odeslán do modelové vrstvy, aby vložila data a získala zpět zprávu o úspěchu nebo selhání. MVC Architecture diagram je znázorněn níže:

MVC Architecture
MVC Architecture Diagram

Modelová vrstva

  • Jedná se o datovou vrstvu, která se skládá z obchodní logiky systému.
  • Skládá se ze všech dat aplikace
  • Představuje také stav aplikace.
  • Skládá se z tříd, které mají vazbu na databáze.
  • Řadič se připojí k modelu a načte data a odešle je do vrstvy zobrazení.
  • Model se také propojí s databází a ukládá data do databáze, která je k němu připojena.

Zobrazit vrstvu

  • Toto je prezentační vrstva.
  • Skládá se z HTML, JSP atd. do něj.
  • Obvykle představuje uživatelské rozhraní aplikace.
  • Používá se k zobrazení dat, která jsou načítána z řadiče, který zase získává data z tříd modelové vrstvy.
  • Tato vrstva zobrazení zobrazuje data o uživatelském rozhraní aplikace.

Vrstva ovladače

  • Funguje jako rozhraní mezi pohledem a modelem.
  • Zachycuje všechny požadavky, které přicházejí z vrstvy zobrazení.
  • Přijímá požadavky od vrstvy zobrazení a zpracovává požadavky a provádí potřebnou validaci požadavku.
  • Tyto požadavky se dále zasílají do modelové vrstvy pro zpracování dat a jakmile je požadavek zpracován, odešle se zpět do kontroléru s požadovanými informacemi a podle toho se zobrazí v pohledu.

Výhody MVC Architecture

Výhody MVC jsou:

  • Snadno se udržuje
  • Snadno se prodlužuje
  • Snadno testovatelné
  • Ovládání navigace je centralizované

Příklad návrhu aplikace JSP s MVC Architecture

V tomto příkladu si ukážeme, jak používat architekturu MVC v JSP.

  • Vezmeme si příklad formuláře se dvěma proměnnými „e-mail“ a „heslo“, což je naše pohledová vrstva.
  • Jakmile uživatel zadá e-mail a heslo a klikne na odeslat, akce se předá na mvc_servlet, kam se předá e-mail a heslo.
  • Tento mvc_servlet je vrstva řadiče. Zde v mvc_servlet je požadavek odeslán objektu bean, který funguje jako modelová vrstva.
  • Hodnoty e-mailu a hesla jsou nastaveny do beanu a uloženy pro další účely.
  • Z beanu je hodnota načtena a zobrazena ve vrstvě zobrazení.

Mvc_example.jsp

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

Řádek 10–15 kódu: Zde bereme formulář, který má dvě pole jako parametr „email“ a „heslo“ a tento požadavek je třeba předat kontroléru Mvc_servlet.java, který je předán v akci. Metoda, kterou se předává, je metoda POST.

Mvc_servlet.java

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 ovladače

14. řádek kódu:mvc_servlet rozšiřuje HttpServlet.

26. řádek kódu: Protože se používá metoda POST, požadavek přichází do metody doPost servletu, která zpracovává požadavky a ukládá do objektu bean jako testobj.

34. řádek kódu: Pomocí objektu požadavku nastavujeme atribut jako gurubean, kterému je přiřazena hodnota testobj.

35. řádek kódu: Zde používáme objekt dispečera požadavku k předání zprávy o úspěchu do mvc_success.jsp

TestBean.java

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:

Řádek 7–17 kódu: Obsahuje getters a setters e-mailu a hesla, které jsou členy třídy Test Bean

Řádek 19–20 kódu: Definuje e-mail a heslo členů typu string ve třídě bean.

Mvc_success.jsp

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

12. řádek kódu: atribut získáváme pomocí objektu request, který byl nastaven v metodě doPost servletu.

13. řádek kódu: Tiskneme uvítací zprávu a e-mailové ID, které byly uloženy v objektu bean

Výstup:

Když spustíte výše uvedený kód, získáte následující výstup:

Když kliknete na mvc_example.jsp, dostanete formulář s e-mailem a heslem s tlačítkem Odeslat.

Po zadání e-mailu a hesla do formuláře a poté klikněte na odeslat

Návrh aplikace JSP

Po kliknutí na odeslat se výstup zobrazí jako níže

Návrh aplikace JSP

Výstup:

Když na obrazovce zadáte e-mail a heslo a kliknete na odeslat, podrobnosti se uloží do TestBean az TestBean se načtou na další obrazovce, aby se zobrazila zpráva o úspěchu.

Shrnutí

V tomto článku jsme se dozvěděli o architektuře MVC, tj. Model View Controller.

JSP hraje roli prezentace údajů a správce. Jedná se o rozhraní mezi modelem a pohledem, zatímco model se připojuje k ovladači i databázi. Hlavní obchodní logika je přítomna ve vrstvě modelu.