Thứ Hai, 26 tháng 9, 2016

Bài 1:Java EE and MVC

I. JAVA EE:
1. Java EE là gì?
"Java EE" tên đầy đủ là "Java Enterprise Edition" dịch sang tiếng việt có nghĩa là là "Java Phiên Bản Doanh Nghiệp", nó là một nền tảng (platform) dành cho việc xây dựng các ứng dụng (application) cấp doanh nghiệp.

Java EE tập hợp nhiều công nghệ kỹ thuật và phối hợp chúng với nhau, việc này sẽ làm giảm đáng kể chi phí và độ phức tạp cho việc xây dựng, phát triển, triển khai, quản lý các tầng làm việc (managing multi-tier), cho các ứng dụng máy chủ trung tâm.

Java EE được xây dựng dưa trên nền tảng Java SE và có thêm các tập APIs (application programming interfaces) để phát triển các ứng dựng phái máy chủ một cách nhanh chóng(running), linh động(portable), mạnh mẽ(rob), khả năng mở rộng cao, đáng tinh cậy và bảo mật (vãi cả đạn thằng lìn nào mô tả cái kiểu gì suy nghĩ nửa ngày trời mới viết ra được câu có vẻ hợp lý mà chả biết đúng ý nó không nữa).

Java EE đã ra rất nhiều phiên bản và có rất nhiều thành phần mới hoặc hỗ trợ mới khác nhau theo từng phiên bản tuy nhiên bài viết này chỉ nhắm vào mục đích là khái miện cơ bản về Java EE, nên mình chỉ nói tới hai phần chủ chốt nhất trong nền tảng Java EE là:

  • Enterprise Java Beans (EJB): một thành phần kiến trúc của các ứng dụng server được quản lý, sử dụng để đóng gói (encapsulate) các business logic (nghiệp vụ logic hay nghiệp vụ luận lý) của các ứng dụng. Kỹ thuật EJB cho phép nhanh chóng tạo ra các ứng dụng có các tính chất như là đơn giản hóa việc phân phối(simplified development of distributed: dạng như cài đặt hay trang bị cho nhân viên, khách hàng), dễ dàng tương tác (transactional), an toàn(secure) và linh hoạt(portable) dựa trên công nghệ Java.
  • Java Persistence API (JPA): một framework cho pháp nhà phát triển quản lý dữ liệu bằng cách sử dụng ánh xạ đối tượng quan hệ (Object Relational Mapping - ORM) trong các dứng dụng được xây dựng trên nền tảng Java

2. Cấu trúc Java EE.
    - Java EE có kiến trúc 3 tầng:
  • Client -Tier: Khách hàng tầng bao gồm các giao diện mà qua đó các ứng dụng được truy cập. Giao diện được phát triển để được sử dụng bởi khách hàng, nhân viên, nhà cung cấp của doanh nghiệp.
  • Mid -Tier: lớp giữa thực hiện logic kinh doanh của các ứng dụng thông qua các loại đậu và các tập tin lớp khác của ứng dụng.
  • Data -Tier: tầng dữ liệu bao gồm tất cả các dữ liệu doanh nghiệp mà được truy cập bởi các ứng dụng.


   - Ứng dụng đa tầng:       

  • Java EE clients       
  • Web components      
  • Java EE components     
  •  Database components      
  •  Security components

     Một ứng dụng nhiều tầng có logic ứng dụng được chia thành nhiều thành phần dựa trên chức năng của họ.


     Những ứng dụng nhiều tầng được phân phối trong đó mỗi thành phần ứng dụng có thể được cài đặt trên cùng hoặc trên các máy khác nhau tùy thuộc vào tầng mà họ thuộc về.



- Java EE có các loại container như :
  • Web Container : Quản lý sự thực thi của các thành phần web, và container của chúng chạy trong máy chủ Java EE (Java EE server).
  • EJB Container : Quản lý sự thực thi của các thành phần EJB, các thành phần EJB và container của chúng chạy trong Java EE server.
  • Application client Container : Quản lý sự thực thi các thành phần của ứng dụng client.
  • Applet Container : Quản lý sự thực thi của applets(ứng dụng ký sinh).
- Các API của Java EE chứa đựng một số kỹ thuật được mở rộng thêm từ những chức năng trong các API của Java SE.

javax.ejb.*

API về chủ thể cấp kinh doanh (Enterprise Java Beans - hay EJB) cung cấp một tập các hàm API mà một khung chứa đối tượng phân tán (distributed object container) phải hỗ trợ để có thể cung cấp tính bền bỉ (persistence), khả năng liên lạc từ xa (dùng RMI), khả năng khống chế tương tranh (concurrency control) và điều khiển truy cập (access control) cho các đối tượng phân tán (distributed objects).

javax.servlet

API về Servlets cung cấp một tập các hàm API giữa một khung chứa mạng (web container) và một servlet nhằm đảm nhiệm việc xử lí các yêu cầu và hồi âm các phản ứng.

javax.servlet.jsp

Các gói javax.servlet.jsp và javax.servlet.jsp.tagext cung cấp các hàm API về JSP.

javax.naming

Các gói javax.naming, javax.naming.directory, javax.naming.event, javax.naming.ldap và javax.naming.spi định nghĩa các hàm API đối với các giao tiếp (Interface) sử dụng tên trong khi truy cập đối tượng và thư mục (Java Naming and Directory Interface - JNDI).

java.sql, javax.sql

Các gói java.sql và javax.sql cung cấp các hàm liên nối với cơ sở dữ liệu (Java Database Connectivity - JDBC).

java.transaction.*

Các gói này cung cấp các API để quản lý việc giao dịch giữa các nguồn tài nguyên khác nhau (Java Transaction API - JTA).

javax.xml.*

Các gói này cung cấp các hàm API để xử lý các tài liệu XML (Java API for XML Processing - JAXP).

javax.jms.*

Các gói này cung cấp các hàm API sử dụng trong dịch vụ thông điệp của Java (Java Message Service - JMS).

- Các công nghệ trong Java EE :
  • Java Database Connectivity (JDBC) API: JDBC là một tập hợp các giao diện cho phép các ứng dụng Java truy cập vào cơ sở dữ liệu bất kỳ. API này có cùng một mục đích như ODBC (Open Database Connectivity) Microsoft.
  • Remote Method Invocation (RMI): RMI là một API cho phép các đối tượng Java để giao tiếp từ xa với các đối tượng khác.
  • Java IDL: IDL (Interface Definition Language) là một ngôn ngữ nền tảng tiêu chuẩn khai báo độc lập được sử dụng để xác định các giao diện đối tượng triển khai cung cấp và đối tượng khách hàng gọi. Java IDL cho phép bất kỳ đối tượng Java để giao tiếp với các đối tượng khác trong ngôn ngữ bất kỳ bằng phương tiện của IDL.
  • Enterprise Java Beans: Đóng gói các logic thương mại (business logic) và hổ trợ thực hiện giao tác và bảo mật.
  • Servlets và Java Server Pages (JSP): Công nghệ dùng trong xây dựng những ứng dụng web.
  • Java Message Service (JMS): Tập APIs cho phép ứng dụng tạo, gởi, nhận, và đọc thông điệp bất đồng bộ.
  • Java Transaction API (JTA): JTA cho phép những ứng dụng Java EE thực hiện những giao tác phân tán (distibuted transaction).
  • JavaMail: Cho phép thành phần java gởi và nhận mail.
  • Java API cho xử lý XML (Java API for XML Processing -JAXP): XML là một định dạng dữ liệu cho các tài liệu thay thế cấu trúc trên Web. JAXP cho phép các ứng dụng Java phân tích và chuyển đổi tài liệu XML. XML được sử dụng nhiều trong Java EE như là một định dạng dữ liệu.
  • Java Naming và Directory Interface (JNDI): JNDI là một giao thức cung cấp một tập API chuẩn cho phép truy cập tới những dịch vụ naming và directory.
  • Java Persistence API (JPA) : Cho phép ánh xạ giữa một lớp java với các cột trong một bảng.

* ví dụ về JSP:

Nhận xét:
 - Ưu điểm:
  • Java EE tập hợp nhiều công nghệ kỹ thuật và phối hợp chúng với nhau, việc này sẽ làm giảm đáng kể chi phí và độ phức tạp cho việc xây dựng, phát triển, triển khai, quản lý các tầng làm việc (managing multi-tier), cho các ứng dụng máy chủ trung tâm.
  • Java EE được xây dựng dưa trên nền tảng Java SE và có thêm các tập APIs (application programming interfaces) để phát triển các ứng dựng phái máy chủ một cách nhanh chóng(running), linh động(portable), mạnh mẽ(rob), khả năng mở rộng cao, đáng tinh cậy và bảo mật.
Nhược điểm
  •  Trong kỹ thuật Java EE, không nói về REST và khách hàng jersey
  •  Java EE không quan tâm đến bảo mật doanh nghiệp.
II. MVC

Cấu trúc Model 1


Servlet và JSP là các công nghệ chính để phát triển các ứng dụng web.
Công nghệ Servlet không tạo tiến trình, thay vào đó nó tạo Thread để xử lý yêu cầu. Lợi thế của việc tạo Thread là nó không cấp phát khu vực bộ nhớ riêng rẽ. Do đó, nhiều yêu cầu liên tiếp nhau có thể dễ dàng được xử lý bởi Servlet. Vấn đề chính xảy ra với Servlet là nó cần tái biên dịch nếu có bất cứ code nào được sửa đổi. 
JSP xử lý hầu hết các vấn đề của Servlet. Bạn không cần tái triển khai ứng dụng nếu JSP page được sửa đổi. JSP cung cấp hỗ trợ để phát triển các ứng dụng web sử dụng JavaBean, thẻ tùy biến Custom Tag và JSTL để bạn có thể đặt tính logic riêng với JSP, do đó việc test và debug trở nên dễ dàng hơn. 

-Lợi thế và hạn chế của Cấu trúc Model 1

Lợi thế: Dễ dàng và nhanh chóng để phát triển các ứng dụng web.
Hạn chế:

  • Việc điều khiển điều hướng là không tập trung khi mỗi page có trình logic riêng để xác định page tiếp theo. Nếu tên JSP page bị thay đổi mà được tham chiếu bởi trang khác, thì chúng ta cũng phải thay đổi tên đó trong các trang tham chiếu.
  • Tiêu tốn thời gian. Bạn cần dành nhiều thời gian hơn để phát triển các thẻ tùy biến Custom Tag trong JSP.
  • Khó khăn để kế thừa. Nó thực sự tốt với các ứng dụng nhỏ nhưng với các ứng dụng lớn thì chưa hẳn.

Cấu trúc Model 2 (MVC)

Model 2 là dựa trên mẫu thiết kế MVC (Model View Controller). MVC bao gồm ba phần chính là model, view và controller.




Model: Biểu diễn trạng thái (dữ liệu), và là tầng thấp nhất trong mẫu. Nó phản hồi yêu cầu từ view và nó cũng phản hồi các chỉ thị từ controller để cập nhật chính nó.
View: Chịu trách nhiệm hiển thị dữ liệu trong một định dạng cụ thể.
Controller: Hoạt động như một giao diện Interface giữa View và Model. Nó chặn và chiu trách nhiệm phản hồi tất cả các yêu cầu (nhận input và lệnh) tới Model/View để thực hiện các tương tác tương ứng. Controller nhận input, nó thực hiện việc validate và sau đó thực hiện các hoạt động mà sửa đổi trạng thái của Model.

Lợi thế và hạn chế của Model 2 (MVC)

Lợi thế:
  • Điều khiển điều hướng là tập trung. Bây giờ chỉ có Controller chứa trình logic để quyết định page tiếp theo.
  • Dễ dàng để duy trì, kế thừa, và test.
Hạn chế: Chúng ta cần viết code cho chính Controller. Nếu chúng ta thay đổi code của Controller, chúng ta cần tái biên dịch (biên dịch lại) lớp đó và tái triển khai ứng dụng.