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:

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
Po kliknutรญ na odeslat se vรฝstup zobrazรญ jako nรญลพe
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.


