Bai2 tong quan_mvc_0567
description
Transcript of Bai2 tong quan_mvc_0567
![Page 1: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/1.jpg)
Bài 2. Tổng quan MVC
![Page 2: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/2.jpg)
Nội dung
1. Ví dụ về MVC
2. Giới thiệu về thiết kế MVC
3. Quá trình phát triển của kiến trúc ứng
dụng Web
3.1. Model 1
3.2. Model 2
3.3. Application frameworks
2
![Page 3: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/3.jpg)
Bài toán
3
![Page 4: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/4.jpg)
Giải pháp ban đầu
Xây dựng nhiều servlet
Trong servlet: xử lý nghiệp vụ (business
logic), hiển thị 4
![Page 5: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/5.jpg)
Giải pháp +: sử dụng JSP
Sử dụng JSP cho việc hiển thị
Servlet forward các yêu cầu tới JSP
Tách business logic và presentation
5
![Page 6: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/6.jpg)
Giải pháp ++: sử dụng MVC
Đưa business logic ra khỏi servlet và đặt
trong Model – các lớp Java có thể sử dụng
lại
Model: sự kết hợp của business data và các
phương thức theo tác trên dữ liệu
6
![Page 7: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/7.jpg)
Giải pháp ++: sử dụng MVC
7
![Page 8: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/8.jpg)
Ví dụ 1. Tư vấn bia
8
Trang JSP
Trang html
![Page 9: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/9.jpg)
9
![Page 10: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/10.jpg)
10
beer_v1
websrc
WEB-INF
web.xml
result.htmlform.htmlcom
BeerExpert.java
example
web model
BeerSelect.java
Cấu trúc thư mục lập trình
![Page 11: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/11.jpg)
11
WEB-INF
beer_v1
classes
webapps
web.xml
result.htmlform.html
com
BeerExpert.class
example
web model
BeerSelect.class
Cấu trúc thư mục triển khai
tomcat
![Page 12: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/12.jpg)
form.html
<form method="POST“
action="SelectBeer.do">
Select beer characteristics
<p>Color:
<select name="color" size="1">
<option value="light">light</option>
<option value="amber">amber</option>
<option value="brown">brown</option>
<option value="dark">dark</option>
</select>
<center> <input type="SUBMIT"> </center>
</form>
12
![Page 13: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/13.jpg)
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app …>
<servlet>
<servlet-name>ServletBeer</servlet-name>
<servlet-class>com.example.web.BeerSelect
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletBeer</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>
</web-app>
13
![Page 14: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/14.jpg)
Servlet BeerSelect – version 1
public class BeerSelect extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Beer Selection Advice<br>");
String c = request.getParameter("color");
out.println("<br>Got beer color "+c);
}
}
14
![Page 15: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/15.jpg)
Test ứng dụng
15
![Page 16: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/16.jpg)
Model BeerExpert
public class BeerExpert {
public List getBrands(String color){
List brands = new ArrayList();
if(color.equals("amber")){
brands.add("Jack Amber");
brands.add("Red Moose");
}
else{
brands.add("Jail Pale Ale");
brands.add("Gout Stout");
}
return brands;
}
}
16
![Page 17: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/17.jpg)
Servlet BeerSelect – version 2
import package com.example.web;
…
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String c = request.getParameter("color");
BeerExpert be = new BeerExpert();
List result = be.getBrands(c);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Beer Selection Advice<br>");
Iterator it = result.iterator();
while(it.hasNext()){
out.print("<br>try: "+it.next());
}
}
17
![Page 18: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/18.jpg)
Test ứng dụng
18
![Page 19: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/19.jpg)
Kiến trúc hiện tại
19
![Page 20: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/20.jpg)
Kiến trúc mong muốn
20
![Page 21: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/21.jpg)
Result.jsp
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<body>
<h1 align="center">Beer Recommendation </h1> <p>
<%
List styles=(List) request.getAttribute("styles");
Iterator it = styles.iterator();
while(it.hasNext()){
out.print("<br>try: "+it.next());
}
%>
</body>
</html>
21
![Page 22: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/22.jpg)
Servlet BeerSelect – version 3
import package com.example.web;
…
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String c = request.getParameter("color");
BeerExpert be = new BeerExpert();
List result = be.getBrands(c);
request.setAttribute("styles", result);
RequestDispatcher view = request.getRequestDispatcher("result.jsp");
view.forward(request, response);
}
22
![Page 23: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/23.jpg)
Test lại ứng dụng
23
![Page 24: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/24.jpg)
Nội dung
1. Giới thiệu về mẫu thiết kế MVC
2. Quá trình phát triển của kiến trúc ứng
dụng Web
2.1. Model 1
2.2. Model 2
2.3. Application frameworks
24
![Page 25: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/25.jpg)
2. Giới thiệu MVC
25
![Page 26: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/26.jpg)
MVC Pattern
26
![Page 27: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/27.jpg)
Model
Model (Business process layer)
Mô hình hóa dữ liệu và hành vi (data & behavior)
trong xử lý nghiệp vụ (business process)
Chịu trách nhiệm
Thực hiện các truy vấn DB
Tính toán trong các nghiệp vụ
VD: Xử lý các orders
Đóng gói dữ liệu và hành vi, độc lập với tầng
presentation
27
![Page 28: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/28.jpg)
View
View (Presentation layer)
Hiển thị thông tin tùy thuộc vào loại client
Biểu diễn kết quả của tầng business logic
(Model)
Không cần quan tâm làm thế nào có được thông
tin, hoặc thông tin ở đâu (Model chịu trách
nhiệm)
28
![Page 29: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/29.jpg)
Controller
Controller (Control layer)
Kết nối tương tác của người dùng với các nghiệp
vụ cung cấp phía sau
Chọn ra cách biểu diễn phù hợp
Ví dụ: ngôn ngữ, biến đối định dạng thông tin theo
vùng, quyền hạn người dùng
Một request tới ứng dụng sẽ chuyển cho tầng
Control.
Tầng này quyết định request được xử lý như thế nào,
và thông tin sẽ được trả lại như thế nào
29
![Page 30: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/30.jpg)
3. Quá trình phát triển của
kiến trúc ứng dụng Web
30
![Page 31: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/31.jpg)
3. Quá trình phát triển của kiến trúc MVC
No MVC
MVC Model 1 (Page-centric)
MVC Model 2 (Servlet-centric)
Web application frameworks
Struts
Standard-based Web application framework
JavaServer Faces (JSR-127)
31
![Page 32: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/32.jpg)
3. Quá trình phát triển của kiến trúc ứng
dụng Web cho đến khi Model 1 ra đời
Model 1 architectureNo MVC
32
![Page 33: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/33.jpg)
3.1. Model 1
(Page-Centric Architecture)
33
![Page 34: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/34.jpg)
3.1. Model 1 Architecture (Page-centric)
Request
1
JSPpages
Java Bean
Response
4
2
3
BR
OW
SE
R
Servlet Container
Enterprise Information Systems (EIS)
34
![Page 35: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/35.jpg)
Kiến trúc Page-centric
Bao gồm 1 loạt các trang JSP có liên hệ chặt chẽ
với nhau
Các trang JSP xử lý tất cả: presentation, control, và
business process
Business process logic và control được CODE
CỨNG trong các trang JSP
Dưới dạng JavaBeans, scriptlets, expression
Chuyển trang được thực hiện
Khi user click vào 1 liên kết. Ví dụ: <A HERF="find.jsp>
Qua hành động submit form. Ví dụ: <FORM
ACTION="search.jsp">
35
![Page 36: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/36.jpg)
Kiến trúc Page-centric
memu.jsp catalog.jsp checkout.jsp
dataBase
page–centric catalog application 36
![Page 37: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/37.jpg)
Kịch bản sử dụng trong kiến trúc Page-
centric
Client
View
search .html
list.jsp
Model
JavaBeans
Controller
find.jsp
delete.jsp
redirect
forward
Request 1
Request 2
Request 3
response
response
37
![Page 38: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/38.jpg)
3.2. Model 2
(Servlet-Centric Architecture)
38
![Page 39: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/39.jpg)
Model 2 Architecture (Servlet-centric)
Request
1
(Controller)Servlet
(View)JSPResponse
5
3
4
BR
OW
SE
R
Servlet Container (EIS)
Redirect2
(Model)Java Bean
MVC Design Pattern
39
![Page 40: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/40.jpg)
Tại sao sử dụng kiến trúc Model 2?
Nếu muốn biểu diễn các trang JSP khác
nhau, tùy theo dữ liệu nhận được?
Riêng JSP với JavaBeans và custom tags
(Model 1) chưa xử lý tốt được
Giải pháp
Sử dụng đồng thời Servlet và JSP (Model 2)
Servlet xử lý request gửi tới, xử lý 1 phần dữ
liệu, thiết lập các beans, forward kết quả cho 1
trong nhiều trang JSP nào đó
40
![Page 41: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/41.jpg)
Servlet-centric Architecture
JSP chỉ được sử dụng để biểu diễn kết quả
(presentation)
Xử lý điều khiển (Control) thực hiện bởi servlets
Servlet hoạt động như một gatekeeper
Cung cấp các services thông dụng, như authentication,
authorization, login, error handling, …
Servlet hoạt động như một central controller
Quyết định logic phù hợp để xử lý các request, sẽ gửi
request đến những nơi nào, …
Thực hiện việc điều hướng (redirecting)
41
![Page 42: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/42.jpg)
Servlet-centric Scenario
Client
View
search .html
list.jsp
Model
JavaBeans
Controller
forward
Request 1
Request 2
Request 3
response
response
servlet
42
![Page 43: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/43.jpg)
3.3. Web Application
Frameworks
43
![Page 44: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/44.jpg)
Web Application Frameworks
Dựa trên kiến trúc MVC Model 2
Hầu hết các ứng dụng Web phải cung cấp
các chức năng
Nhận (receive) và gửi tiếp (Dispatching) HTTP
requests
Gọi các phương thức từ tầng model
Tổng hợp và chọn ra các views trả về cho client
Cung cấp các classes và interfaces cho lập
trình viên sử dụng/mở rộng
44
![Page 45: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/45.jpg)
Tại sao sử dụng các Web Application
Framework?
Phân tách tầng presentation và các business logic
thành các components
Cung cấp 1 điểm điều khiển trung tâm
Cung cấp các tính năng mở rộng
Dễ dàng kiểm thử unit (unit-testing) và bảo trì
Nhiều công cụ hỗ trợ
Ổn định
Có cộng đồng hỗ trợ mạnh mẽ
Đơn giản hóa chế độ đa ngôn ngữ (internationalization)
Đơn giản hóa việc validate đầu vào
45
![Page 46: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/46.jpg)
Tại sao sử dụng các Web Application
Framework?
Frameworks đang phát triển mạnh mẽ
JSP/Servlets vẫn còn khó sử dụng
Frameworks định nghĩa các components
chuẩn, cho phép tái sử dụng.
Frameworks còn chỉ rõ cách thức phối hợp
các components trong 1 ứng dụng
46
![Page 47: Bai2 tong quan_mvc_0567](https://reader034.fdocument.pub/reader034/viewer/2022051610/54903081b4795982638b4f75/html5/thumbnails/47.jpg)
Một số Web Application Frameworks
Apache Struts I and II
Spring Framework MVC
JavaServer Faces (JSR-127)
Echo
Tapestry
Wicket
...
47