Saturday, July 12, 2014

AWAJS Overview (Giới thiệu về AWAJS)

1. Giới thiệu:

Architecting Web Aplication JSF and Struts (hay AWAJS) được hiểu là kiến trúc thiết kế nên ứng dụng Web.



2. Yêu cầu:

Bạn sẽ phải chuẩn bị trước phần mềm hỗ trợ như NetBeans và những phần mềm thứ ba để giúp hoàn thành chương trình này.

Yêu cầu bạn phải dựa vào hai famework là JSF (JSF là gì?)Struts (Struts là gì?), nó sẽ hỗ trợ tốt về tư duy cho bạn để 
thiết kế giao diện này.

Chúng ta sẽ học về Struts trước sau đó sẽ tới JSF trong 5 buổi tới.




3. Ứng dụng:

Thiết kế giao diện để phục vụ cho làm mô hình MVC mà chúng ta đã làm quen ở môn trước, bạn có tham khảo bài viết đó ở đây: Mô hình MVC



Mô hình minh học cho MVC



MVC Design Pattern

I. Vấn đề

Trước đây khi chúng ta lập trình một trang jsp,chúng ta thường đan xen các mã html cùng với các mã jsp. Điều này sẽ dẫn đến những khó khăn sau có thể gặp phải:
Người thiết kế giao diện cũng cần phải biết các ngôn ngữ lập trình, hoặc bạn phải trực tiếp thiết kế chúng.

Việc bảo trì chúng thường rất khó khăn, vì một phần các mã chương trình lẫn lộn với mã html.

Khi có lỗi xảy ra, việc tìm ra lỗi và định vị ỗi cũng là một vấn đề khó khăn.. .v.v


II. Mô hình MVC.

Ngày nay người ta dùng mô hình MVC cho những dự án lớn để có thể giải quyết những vấn đề trên. Ứng dụng được chia ra làm 3 phần: Phần View, Model và Controller
Model: Mô hình là các lớp java có nhiệm vụ:
- Nhận các yêu cầu từ khung nhìn
- Thi hành các yêu cầu đó (tính toán, kết nối CSDL …)
- Trả về các giá trị tính toán cho View.

ViewBao gồm các mã tương tự như JSP để hiển thị form nhập liệu, các kết quả trả về từ Model…

Bộ điều khiển: Đồng bộ hoá giữa Khung nhìn và Mô hình. Tức là với một trang JSP này thì sẽ tương ứng với lớp java nào để xử lý nó và ngược lại, kết quả sẽ trả về trang jsp nào.

*Lưu ý rằng chúng ta chỉ áp dụng các mô hình, cấu trúc vào trong các dự án lớn, phức tạp còn trong những bài toán nhỏ thì không cần sử dụng bất kì một mô hình nào.

Ưu điểm của mô hình MVC.

- Linh hoạt trong việc phát triển và dễ dàng cho việc mở rộng dự án.
- Các bộ phận tách rời nhau vì vậy dễ dàng cho việc fix.

Source bài viết: Minh An

Login and Logout

Vấn đề

Như chúng ta đã biết thì trong bất kì một dự án nào liên quan đến quản lý thì đều phải có thao tác đăng nhập và đăng xuất.

Vậy trong Java Servlet chúng ta sẽ làm chúng như thế nào? Trong bài này chúng ta hãy cùng tìm hiểu và làm một demo nho nhỏ về Login và Logout.

I. Tài nguyên được bảo vệ và tài nguyên tự do truy cập

Ví dụ trong website của chúng ta có các tài nguyên là các trang: Register.jsp , Login.jsp, ViewAllPost.jsp.

Trong số này thì Register.jsp và ViewAllPost.jsp là 2 tài nguyên được bảo vệ (bắt buộc phải đăng nhập để xác định quyền hạn truy cập).

Hình trên biểu diễn trình tự của  việc login.
Đầu tiên người dùng gửi một request đến, Filter Authenticate sẽ check xem liệu request đó có được phép truy cập vào tài nguyên không? Nếu như được phép thì cho phép tiếp tục truy cập. Nếu không thì chuyển request đến trang login. Nhiệm vụ của trang login là gửi thông tin đăng nhập của người dùng đến LoginServlet và check xem có đúng là tài khoản trong hệ thống không? Nếu đúng thì cho truy cập lại trang cũ. nếu không thì trả về trang Login.jsp.

Bắt đầu làm demo.

Đầu tiên chúng ta tạo 3 trang JSP là Register, Login, ViewAllPost và một filter là Authenticate. Filter Authenicate sẽ chặn lại request đến tất cả các trang trong hệ thống.
Trong Filter Authenticate chúng ta khai báo một phương thức như sau:

public boolean isFreeAccess(String url) {
        if ((!"".equals(url) && url.contains("Welcome")) || (!"".equals(url) && url.contains("LoginServlet.jsp"))) {
            return true;
        }
        return false;
    }

Phương thức này dùng để check và phân loại request.

Tiếp đến trong phương thức doFilter chúng ta viết những đoạn mã sau:

String url = httpRequest.getRequestURI();
        request.setAttribute("wantedUrl", url);

        if (isFreeAccess(url) || httpRequest.getSession().getAttribute("username") != null) {
            chain.doFilter(request, response);
        } else {
            RequestDispatcher dis = request.getRequestDispatcher("Login.jsp?url=" + url + "");
            dis.forward(request, response);
        }

Tiếp đến ở trang Login chúng ta khai báo một form có action="LoginServlet" và có 3 input. với type của 3 cái lần lượt là "text", "password","hidden" dùng để lấy thông tin của người dùng và truyền đường dẫn mà người dùng muốn truy cập.

Ở trong LoginServlet ta sẽ code nghiệp vụ tiến hành check thông tin của người dùng và chuyển hướng họ đến trang muốn đến nếu thông tin username và password cung cấp là chính xác.
Nếu không thì ta sẽ trở lại trang Login.jsp.

- Tiếp đến ta sẽ tạo ra thêm một servlet với tên là LogoutServlet. Khi gọi đến servlet này ta sẽ tiến hành huỷ bỏ session và chuyển hướng đến trang Login.jsp


Source bài viết: Login n Logout

Custom tag

JSP CUSTOMS TAGS

Vấn đề; Giúp code jsp dễ đọc, có thể tái sử dụng, giúp bao gói
Custom tag là gì :
Custom Tag cho phép lập trình viên nhúng các đoạn code java vào trong trang jsp
Cung cấp cơ chế để tái sử dụng và bao gói các code, lệnh phức táp  trong jsp
Làm đơn giản hóa, tái sử dụng java code
JSP 1.0 không hỗ trợ tag libraries
JSP 1.1 hỗ trợ lưu trữ các custom tags của người dùng đã tạo trong trang jsp
Cấu trúc của custom tag trong jsp giống như xml tags
Các loại của custom tag: 


Thành phần của một custom tag:
Custom tag gồm hai phân: tag handler và tag library descriptor.
tag handler:xử lý công việc
library descriptor: mô tả custom tag
Xử lý custom tag trong trang jsp:

Khi gặp một custom tag ,client request lên servlet jsp engine sẽ tìm cái tag library descriptor file, sau đó  nó sẽ gọi tag handler tương ứng , sau đó nó sẽ trả kết quả cho jsp engine , rồi trình duyệt .Công việc xử lý được lữu trữ ở nơi riêng, không trên jsp nữa, 
Các loại custom tag:




Source bài viết từ Minh An: Customs tags

Thursday, July 3, 2014

Expression Language (Ngôn ngữ biểu hiện)

Như trong tiêu đề, ngày hôm nay chúng ta sẽ học cách sử dụng Expression Language (EL), hay còn được hiểu theo nghĩa Việt hóa là Ngôn ngữ biểu hiện.

1. Giới thiệu:

   * EL là một tính năng mới chỉ bắt đầu có trong JSP 2.0 (JSP là gì?)
   * Dễ dàng viết biểu thức trên trang JSP ngắn hơn, dễ sử dụng hơn
   * Hai biểu thức thông dụng nhất của EL JSP được sử dụng trong:

              + Static text. (Text tĩnh)
              + Standard and Custom tags. (Tiêu chuẩn và tùy chỉnh thẻ tag)

Cấu trúc của Expression Language : ${expression} (expression là một đoạn code nào đó)


Sơ đồ Expression Language, giao tiếp với Các đối tượng ẩn và ngôn ngữ Java


2. Tính năng:

 a. Hỗ trợ:

   * Hỗ trợ sử dụng các đối tượng (Object) và các mảng (Array).
   * Hỗ trợ cả các đối tượng ẩn (Đối tượng ẩn là gì?)
   * Và đặc biệt có thể hỗ trợ toán học.
   * EL sẽ được tính toán trong thời gian chạy (Runtime).

  b. Biến và thuộc tính (Variable and Attribute):

    * Biến đó được dùng để lưu trữ và đồng bộ các giá trị trong chương trình JSP.

    * Biến đó cũng được quy như một thuộc tính mà được lưu trữ như Session, Request, Page, Application (Bốn đối tượng này đã nhắc qua bài Implicit Object).

    * Bạn có thể truy cập đến giá trị của biến bằng dùng dấu "." (chấm) hoặc dấu []. Ví dụ:
                      ${sessionScope.color} = ${sessionScope["color"]}

3. Thực hành:

Sau đây chúng ta sẽ làm một demo nhỏ sử dụng được ${expression} để minh họa cho Expression Language

Tạo một project rồi sử dụng các code, trong đó có kí hiệu đô-la đó là ${expression}




Khởi chạy ứng dụng


Bạn có thể tham khảo với demo ở dưới: Demo Expression Language


Standard Actions và Java Beans

1. Khái niệm:

Java Bean là một nơi đóng gói và lưu trữ lại các hành động trong Java, hãy coi nó như một class Java nhưng có thể giúp bạn rút ngắn và tiết kiệm dòng code.


Cấu trúc Java Bean


2. Thành phần:

  a. Thuộc tính của Java Bean:

        * Đóng gói và lưu trữ lại các dữ liệu và chức năng.
        * Cung cấp các dịch vụ liên quan dựa trên các đặc điểm kĩ thuật.
        * Giấu việc thực hiện trong ứng dụng, đóng gói dữ liệu và thiết kế lại giao diện để tái sử dụng.

  b. Cấu trúc của Java Bean:

        * Nó nằm trong một Package, được xác định với java.bean.
        * Bean-class có thể sở hữu một constructor không có đối số.
        * Có hai phương thức trong đó: Set và Get. Getter được sử dụng để lấy các thuộc tính trong một Bean-class. Setter được sử dụng để có được những đặc tính của Bean-class.

 3. Thực hành:

  Chúng ta sẽ làm một ví dụ nhỏ để chứng minh khả năng lưu dữ liệu của Java Bean. Thử lưu học sinh đi thi đại học ở dưới đây:

Tạo trang chủ giao diện với danh sách các sinh viên cần thêm




Tiếp theo quan trọng không kém đó là tạo JSP để sử dụng Java Bean



Tiếp theo hãy khai báo biến ở Package, thêm StyleSheet hoặc JavaScript để tạo giao diện đẹp. Chi tiết hãy tải demo để tiện hình dung.


Còn đây là giao diện khi chúng ta chạy ứng dụng

Khi nhấn vào tên thi sinh thì nó sẽ tư động add vào



Bạn có thể tải demo về để tiện tham khảo: Demo Java Bean



Implicit Object (Đối tượng ẩn)

1. Giới thiệu:

Implicit Object (hay được hiểu là đối tượng ẩn)  là những object mặc định trong JSP, nó đã được định nghĩa bởi chính API (API là gì ?). Bạn có thể trực tiếp gọi những tên có sẵn trong trình ứng dụng này.

Những đối tượng này được sử dụng trong các biểu thức, và hai trong số đó là tại Scriptlet hoặc Expressions. Dưới đây là ví dụ về hai biểu thức đó:

 * Scriptlet:

       Đây là đoạn code Java ngắn mô tả về Scriptlet, nó bắt đầu với <% và kết thúc với %>


Ví dụ cho Scriptlet (bôi xanh lá)

Expressions:

       Đây là đoạn code Java ngắn mô tả về Expressions, các hàm sẽ được viết trong ${ ...... }


Ví dụ về Expressions (bôi xanh dương)


2. Yêu cầu:

   Để sử dụng được Implicit Object nói chung và các code ở trên, nó phải được đặt yêu cầu trong các phạm vi sử dụng bao gồm

     * Page : Được sử dụng bởi lớp servlet class.
     * Request : Đây là đối tượng liên quan tới HttpServletRequest. 
     * Session : Đây là đối tượng liên quan tới HttpSession. 
     * Application: Đây là đối tượng liên quan tới ServletContext. 

Và các đối tượng ở trên đều tụ tại thành 4 nhóm với các loại khác nhau bao gồm:

     * Đối tượng liên hệ với trang JSP page servlet
     * Đối tượng có mối quan hệ input -output trong JSP page
     * Đối tượng context.
     * Đối tượng xử lí lỗi

3. Thực hành:

  Hãy thử xem áp dụng hai biểu thức Scriptlet và Expressions trong cùng một ví dụ dưới đây. Trước tiên tạo trang chủ với nội dung như trên





Tiếp tục tạo hai class JSP trong Package và đặt tên tùy ý, ở file đầu tiên chúng ta sẽ sử dụng biểu thức Scriptlet trong code để tạo đường dẫn





Khi chạy giao diện nó sẽ hiện thị như trên






Và ở file thứ hai, chúng ta sẽ sử dụng biểu thức Expressions






Nó sẽ hiển thị giao diện như trên





Để hiểu rõ hơn, bạn có thể tải Demo này lại: Implicit Object