Contents

Tìm hiểu về Java EE 7 – Phần 1 (JSF)

Java EE

Java EE hay còn được viết là J2EE là viết tắt của từ Java Enterprise Edition. Nó là một bộ chuẩn các công nghệ dành cho việc phát triển Java phía server (server-side). Những công nghệ đó bao gồm JavaServer Faces (JSF), Enterprise JavaBeans (EJBs),
Java Messaging Service (JMS), Java Persistence API (JPA), Java API for
WebSocket, Contexts and Dependency Injection (CDI), Java API for XML Web
Services (JAX-WS), Java API for RESTful Web Services (JAX-RS) và Java
API for JSON Processing (JSON-P),…

Ở phần một này chúng ta cùng tìm hiểu JavaServer Faces (JSF) là gì nào?

  • JSF là một Java framework được chuẩn hóa dành cho web UIs dựa trên MVC pattern.
  • JSP là một tiêu chuẩn dành cho việc tạo ra trang web từ mẫu (template).
  • Facelets là sự thay thế của JSP trong tầng View dựa trên mẫu XML thuần (không có scriptlet). Chúng chỉ có thể được dùng trong ứng dụng JSF.

Để thuận tiện cho việc theo dõi và thực hành các bạn dùng công nghệ/công cụ như mình sử dụng nhé:

  • Eclipse
  • Maven
  • GlassFish
  • JSF 2.2

Facelets

Facelets là một phần đặc tả kĩ thuật (specification) của JSF và cũng là presentation technology ưa thích để xây dựng ứng dụng JSF.

Tính năng của Facelets bao gồm:

  • Dùng XHTML để tạo web page.
  • Hỗ trợ thự viện Facelets tag ngoài JSF, JSTL tag.
  • Hỗ trợ EL.
  • Tạo khuôn mẫu (template) cho các components và pages.

Lợi thế của Facelets cho project phát triển quy mô lớn gồm:

  • Hỗ trợ cho tái sử dụng code thông qua các template và composite components
  • Thời gian biên dịch nhanh
  • Compile-time EL validation
  • Render hiệu năng cao.

Nói ngắn gọn, dùng Facelets sẽ giảm thời gian và công sức cần thiết để mà develop và deploy.
Các phiên bản trước JSF dùng JSP để làm tầng view mặc định và ở JSF 2 thì đã thay thế bằng Facelets.

So sánh JSP và Facelets

JSP Compile-Time Overhead

Mỗi lần bạn chỉnh sửa, lưu lại và load lại trang JSP, bộ biên dịch JSP của server sinh ra file Java servlet và biên dịch nó thành một servlet. Quá trình này được gọi là biên dịch JSP và thông thường nó tốn khoảng 1-2 giây tùy thuộc vào hiệu năng của server.

Facelets XML Compilation

Không giống như JSP, Facelets không biên dịch thành servlet. Vì Facelets tuân thủ cú pháp XML (XML-compliant), Facelets framework dùng một SAX-based compiler để xây dựng view. Mặc khác, Facelets có thể được cấu hình để phát hiện và render thay đổi nội dung ngay lập tức.

Các bạn hãy xem ví dụ đơn giản sau về cú pháp của Facelets:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
<h:head>
    <title>The notebook</title>
</h:head>
<h:body>
    <h:outputStylesheet library="css" name="styles.css" />
    <h:form id="userForm">
        <h:messages></h:messages>
        <h:panelGrid columns="2" columnClasses="rightAlign,leftAlign">
            <h:outputLabel for="firstName" value="First Name:">
            </h:outputLabel>
            <h:inputText id="firstName" label="First Name"
                value="#{user.firstName}" required="true">
                <f:validateLength minimum="2" maximum="30">
                </f:validateLength>
            </h:inputText>
            <h:outputLabel for="lastName" value="Last Name:">
            </h:outputLabel>
            <h:inputText id="lastName" label="Last Name"
                value="#{user.lastName}" required="true">
                <f:validateLength minimum="2" maximum="30"> </f:validateLength>
            </h:inputText>
            <h:outputLabel for="email" value="Email:">
            </h:outputLabel>
            <h:inputText id="email" label="Email" value="#{user.email}">
                <f:validateLength minimum="3" maximum="30">
                </f:validateLength>
            </h:inputText>
            <h:panelGroup></h:panelGroup>
            <h:commandButton action="confirmation" value="Save">
            </h:commandButton>
        </h:panelGrid>
    </h:form>
</h:body>
</html>

Bài này mình xin dừng lại tại đây, hẹn gặp các bạn ở bài sau về Java Persistence API (JPA)