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:

Code ล˜รกdek 10โ€“15: 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

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

Code ล˜รกdek 26: 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.

Code ล˜รกdek 34: Pomocรญ objektu poลพadavku nastavujeme atribut jako gurubean, kterรฉmu je pล™iล™azena hodnota testobj.

Code ล˜รกdek 35: 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:

Code ล˜รกdek 7โ€“17: Obsahuje getters a setters e-mailu a hesla, kterรฉ jsou ฤleny tล™รญdy Test Bean

Code ล˜รกdek 19โ€“20: 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:

Code ล˜รกdek 12: atribut zรญskรกvรกme pomocรญ objektu request, kterรฝ byl nastaven v metodฤ› doPost servletu.

Code ล˜รกdek 13: 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.

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