Chủ Nhật, 2 tháng 10, 2016

Java Servlet

Java Servlet: là các chương trình chạy trên một Web server hoặc một Application server và thực hiện như là một tầng trung gian giữa một Yêu cầu từ một trình duyệt web hoặc HTTP client với các Database hoặc các ứng dụng trên HTTP server. Ta có thể thu thập Input từ người sử dụng thông qua các form trên trang web, hiển thị các bản ghi (record) từ một Database hoặc từ nguồn khác, và tạo các trang web động.

***LifeCycle

- LifeCycle của Servle có 4 giai đoạn:

+ Servlet được khởi tạo bởi gọi phương thức init().

+ Servlet gọi phương thức service() để xử lý một yêu cầu từ Client.

+ Servlet bị hủy bởi triệu hồi phương thức destroy().

+ Cuối cùng, servlet trở thành rác và được thu thập bởi Garbage Collector của JVM.


-Initialization: Phương thức được thiết kế để chỉ được gọi một lần. Nó được gọi khi Servlet lần đầu được tạo, và không được gọi lại cho mỗi yêu cầu của người dùng. Khi một người sử dụng triệu hồi một Servlet, một đối tượng đơn của Servlet được tạo, với mỗi yêu cầu từ người dùng, là kết quả trong một thread mới, mà được thao tác tới doGet hoặc doPost một cách thích hợp. Phương thức init() tạo hoặc tải một vài dữ liệu mà sẽ được sử dụng qua vòng đời của Servlet đó. 

-Service: service() là phương thức chính để thực hiện tác vụ thực sự. Nơi chứa servlet như Web Server gọi phương thức service() để xử lý các yêu cầu từ Client và viết phản hồi đã được định dạng trở lại Client đó. Mỗi khi Server nhận một yêu cầu cho một Servlet, thì Server tạo một Thread mới và triệu hồi service(). Phương thức service() kiểm tra kiểu yêu cầu HTTP (Kiểu GET, POST, PUT, DELET, .v.v.) và gọi các phương thức doGet, doPost, doPut, doDelete .v.v. tương ứng một cách thích hợp. 

-Destruction: Phương thức destroy() chỉ được gọi một lần ở giai đoạn cuối trong vòng đời Servlet. Phương thức này giúp servlet của bạn một cơ hội để đóng các kết nối tới Database, dừng thread, viết các danh sách cookie hoặc viết tính toán trên đĩa, và thực hiện các hoạt động cleanup khác.

***Servlet Context and Configuration

- Servlet Context được dùng để duy trì trạng thái của ứng dụng web. Trên máy ảo Java chỉ tồn tại duy nhất một file context. Servlet Context nó biểu diễn một nhóm các tài nguyên được dùng chung giữa các servlet. Ví dụ như thống kê số lượt truy cập trang web.

- Các phương thức thường dùng của Servlet Context: 

+ getInitParameter(): method này chấp nhận tên tham số khởi tạo và trả về giá trị tham số khởi tạo.

+ getInitParameterNames(): method này sẽ trả về giá trị tham số (int) với tên được chỉ định và trả về null nếu tên không tồn tại.

+ getServletContext(): method này trả về context khi servlet được thực hiện.

+ getServletName(): method này trả về tên của servlet.

***Request and Response Methods

-Request Methods: 

+ Khi một trình duyệt yêu cầu một trang web, nó gửi nhiều thông tin tới Web Server, mà không thể được đọc một cách trực tiếp bởi vì thông tin này chuyển động như là một phần của Header trong HTTP Request.

+ Các method implemented truy cập interface theo những thông tin sau:

# Các thông số của ServletRequest  là phương tiện giao tiếp giữa client và các máy chủ.

# Đối tượng thuộc tính có giá trị được sử dụng để giao tiếp giữa container và servlet hoặc giữa các thành phần khác nhau của ứng dụng.

# Thông tin liên quan đến các giao thức được sử dụng để gửi yêu cầu đến servlet.

+ Các method được sử dụng cùng với servlet requests để lấy dữ liệu liên quan đến các servlet requests sau:

# getContextPath():trả về đường dẫn context từ yêu cầu.

# getServletPath(): trả về vị trí của các servlet liên quan đến context của dứng dụng.

# pathinfo(): method này đem lại thêm thông tin về các servlet mà không phải là một phần của đường dẫn context cũng không phải là  servlet path.

# getParamter Method: Giao diện ServletRequest cung cấp phương thức getParameter để lấy các thông số yêu cầu trên servlet. thông số yêu cầu là thông tin thêm gửi với yêu cầu. Method này trả về giá trị của một tham số yêu cầu như là một String hoặc null nếu tham số không tồn tại.
Trong trường hợp của HTTP servlet, các thông số được quy định trong chuỗi truy vấn hoặc gửi dữ liệu mẫu. Method này nên được sử dụng khi các thông số chỉ có một giá trị. Nếu tham số là đối tượng chịu có nhiều hơn một giá trị, sử dụng getParameterValues (java.lang.String).

# requestDispacther: RequestDispacter nhận được yêu cầu từ client và chuyển tiếp đến bất kỳ tài nguyên (chẳng hạn như một servlet, tập tin HTML hoặc tập tin JSP) trên máy chủ. Các đối tượng RequestDispatcher được tạo ra bởi các container servlet. Nó hoạt động như một bức tường bao bọc xung quanh một nguồn tài nguyên máy chủ đặt tại một con đường cụ thể hoặc do một tên cụ thể.

-Response: 

+ khi một Web Server phản hồi một HTTP Request tới trình duyệt, phản hồi đặc trưng bao gồm một dòng Status, một số trường Header, một dòng trống, và tài liệu.

+ Sau đây là các bước liên quan trong việc tạo ra các đáp ứng với các yêu cầu của Client :


# Các dữ liệu cho client có thể được gửi qua một dòng đầu ra. Các dòng dữ liệu có thể là một dòng PrintWriter cho data character và sự đáp ứng đa phương tiện đầu ra được gửi trong  Multimedia Internet Mail Extensions (MIME) trên một đối tượng ServletOutputStream.

# Trong nội dung đa phương tiện, có thể có các loại nội dung khác nhau như text, html, pdf, và như vậy có thể được bao gồm trong response.. Các method trong giao diện ServletResponse được sử dụng để chỉ các loại nội dung của response.

# Sự đáp ứng được yêu cầu của máy chủ cũng có thể yêu cầu một số buffer được phân bổ vào receiving end , that is, the client. Có nhiều phương pháp có thể được sử dụng để truyền đạt các yêu cầu của buffer ở client end.

# Trong trường hợp HTTP responses, status code  cũng được bao gồm trong các responses.Trong trường hợp không tạo ra response, một  response status code sẽ được gửi cho client.

# Phiên bản HTTP cũng có thể yêu cầu cookie được đặt trên phía client-side. Những cookie này có các thông tin session sẽ được gửi đến các client từ các máy chủ. 

***Filtering Requests and Responses

- Servlet Filter là các lớp trong Java có thể được sử dụng trong lập trình Servlet cho các mục đích sau:

+ Để chặn các yêu cầu từ một Client trước khi chúng truy cập một nguồn tại backend.

+ Để thao tác các phản hồi từ Server trước khi chúng được gửi trở lại tới Client.

- Các Filter được triển khai trong web.xml file và sau đó map tới hoặc các tên Servlet hoặc các URL pattern.

- Một Filter là một lớp Java mà triển khai javax.servlet.Filter Interface. Interface này định nghĩa 3 phương thức:

+ public void doFilter (ServletRequest, ServletResponse, FilterChain): Phương thức này được gọi bởi container mỗi khi một cặp request/response được truyền thông qua chain.

+ public void init(FilterConfig filterConfig): Phương thức này được triệu hồi bởi Web container để chỉ một Filter mà đang được đặt bên trong service

+ public void destroy(): Phương thức được gọi bởi Web container để chỉ một Filter bị hủy khỏi service

- Ứng dụng web của bạn có thể định nghĩa một vài Filter cho một mục đích nào đó. Giả sử bạn định nghĩa hai Filter là AuthenFilter và LogFilter. Phần còn lại của tiến trình sẽ giống như ví dụ trên, ngoại trừ việc bạn cần tạo một ánh xạ khác.

- Bậc của Filter trong web.xml quyết định thứ tự mà Web container áp dụng Filter tới các Servlet. Để đảo ngược thứ tự của Filter, bạn chỉ cần đảo ngược các phần tử ánh xạ Filter trong web.xml. VD: 

<filter-mapping>
  <filter-name>AuthenFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
 <filter-name>LogFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>


***Session Tracking

- HTTP là một giao thức Stateless, nghĩa là mỗi khi một Client thu nhận một trang Web, thì Client mở một kết nối riêng rẽ tới Web Server và Server tự động không giữ bất kỳ bản ghi nào của các yêu cầu trước đó từ Client.

- Có 3 cách để duy trì session giữa Web Client và Web Server:

+ Sử dụng Cookie: Một Webserver có thể gán một Session ID duy nhất như là một cookie tới mỗi Web Client và với các yêu cầu liên tục từ Client, chúng có thể được chấp nhận bởi sử dụng cookie đã nhận được.

+ Sử dụng các trường Hidden form: (phần này em đọc không hiểu nên bỏ trống).

+ Viết lại URL: Viết lại URL là cách tốt hơn để duy trì các session và làm việc cho các trình duyệt khi chúng không hỗ trợ các Cookie, nhưng hạn chế ở đây là ta sẽ tạo mỗi URL động để gán cho một Session ID bởi vì trang là trang HTML tĩnh.

- Xóa Session Data trong Servlet: 

+ Gỡ bỏ một thuộc tính cụ thể: Ta có thể gọi phương thức public void removeAttribute(Stringname) để xóa value mà liên kết với một key cụ thể.

+ Xóa toàn bộ Session: Ta có thể gọi phương thức public void invalidate() để loại bỏ toàn bộ Session.

+ Thiết lập timeout cho Session: Bạn có thể gọi phương thức public void setMaxInactiveInterval(int interval) để thiết lập timeout cho từng Session.

+ Log out người sử dụng: Với các Server mà hỗ trợ Servlet 2.4, bạn có thể gọilogout để loại Client ra khỏi Web Server và vô hiệu hóa toàn bộ Session đó.

+ Cấu hình web.xml: Nếu bạn đang sử dụng Tomcat, ngoài các phương thức trên, bạn có thể định cấu hình timeout của Session trong web.xml file như sau:
<session-config>
    <session-timeout>15</session-timeout>
</session-config>
Timeout được biểu diễn bằng phút, và ghi đè timeout mặc định là 30 phút trong Tomcat.Phương thức getMaxInactiveInterval() trong một Servlet trả về quãng thời gian timeout cho session đó bằng giây. Vì thế neeys Session của bạn được định cấu hình là 15 phút trong web.xml, thì getMaxInactiveInterval() trả về 900.

***Asynchronous Processing

- Trong khi thực hiện các servlet và các filter trong một ứng dụng, nếu việc thực thi bị blocking state, sau đó thực hiện các thread được giao cho một asynchronous context. Sau đấy thread được trả về mà không tạo ra các  response  với thread. Asynchronous context hoàn thành các hoạt động ngăn chặn và tạo ra những response to the context. Nếu  response  asynchronous không thể hoàn thành yêu cầu, sau đó các thread được giao cho servlet khác. xử lý asynchronous trong các phương thức dịch vụ được thực hiện thông qua các chức năng được cung cấp bởi các giao diện javax.servlet.AsyncContext.  startAsyncContext () method được gọi để tạo ra một asynchronous context.

- Sau đây là một số method được cung cấp bởi lớp AsyncContext:

+ void start(Runnable r): Nhờ method này, container cung cấp một thread mới
thực hiện các hoạt động đó là ngăn chặn các servlet ứng dụng được gỡ bỏ từ container.

+ getRequest(): Nó trả về một đối tượng ServletRequest để trả lại yêu cầu đó đã bắt đầu quá trình thiết lập một Asynchronous context.

+ getResponse(): Method này trả về một đối tượng ServletResponse. Nó có thể được sử dụng để tạo ra các respond đáp ứng với yêu cầu servlet từ Asynchronous context.

+ complete(): Nó hoàn thành các asynchronous và trả về respond cho client đã yêu cầu khởi động nó.

+ dispatch(): Nó chấp nhận đường dẫn gửi đi như một tham số và dispatches the requests và responses of asynchronous context.



***Non-blocking I/O 

- Để cải thiện hiệu suất của các ứng dụng Java EE, non-blocking I / O được sử dụng để xử lý yêu cầu và trả lời. Sau các bước tóm tắt việc thực hiện các non-blocking I / O cho các yêu cầu xử lý và trả lời bằng văn bản:

+ Bắt đầu một chế độ không đồng bộ cho các yêu cầu / đáp ứng

+ Đối với các yêu cầu hoặc đáp ứng các đối tượng trong các phương thức dịch vụ, có được tương ứng với đầu vào / đầu ra.

+ Gán cho người nghe đến các input and output streams, một người biết lắng nghe đọc đến dòng đầu vào và một viết nghe để dòng đầu ra.

+ Xử lý các yêu cầu và phản hồi trong method  nghe gọi lại.

- Sau đây là các method được cung cấp bởi các javax.servlet.ServletInputStream cho non-blocking I / O:

+ void setReadListener(ReadListener r1): gán một đối tượng người nghe đến stream input, trong đó có các method callback mà không đồng bộ đọc dữ liệu từ các input stream.

+ isReady(): trả về một giá trị boolean chỉ ra rằng dữ liệu có thể được đọc mà không bị chặn.

+ isComplete() :trả về một giá trị boolean để chỉ hoàn thành vào đọc tất cả các dữ liệu trong stream


- Các method được cung cấp bởi javax.servlet.Server OutputStream cho non-blocking I / O:

+ void setWriteListener(WriteListener w): gán một đối tượng người nghe đến stream output mà có các method callback không đồng bộ ghi dữ liệu vào stream output.

+ isReady(): Trả về cho dù các hoạt động viết có thể được hoàn thành mà không  bị chặn.

***Tổng kết: 

Servlet được sử dụng để thay thế cho những công nghệ Web động. Việc sử dụng Servlet mang lại những lợi thế:

  • Dễ di chuyển. Servlet được viết bằng Java nên nó có tính di động cao, thực hiện được trên nhiều hệ điều hành, trên các Web Server khác nhau. Khái niệm “Viết một lần, chạy ở mọi nơi” cũng rất đúng với Servlet.
  • Mạnh mẽ. Servlet hỗ trợ rất hiệu quả cho việc sử dụng các giao diện lõi API như lập trình mạng, xử lý đa luồng, xử lý ảnh, nén dữ liệu, kết nối các CSDL, bảo mật, xử lý phân tán và triệu gọi từ xa RMI, CORBA, v.v. Nó cũng thích hợp để trao đổi tin, truyền thông giữa Client và Server một cách bình thường.
  • Hiệu quả. Servlet có tính hiệu quả cao. Một khi được tải về, nó sẽ được lưu lại trong bộ nhớ của máy chủ. Servlet duy trì các trạng thái của nó, do vậy những tài nguyên ngoại như việc kết nối với CSDL cũng sẽ được lưu giữ lại.
  • An toàn. Bởi vì Servlet được viết bằng Java nên nó kế thừa được tính an toàn của Java. Cơ chế tự động dọn rác và việc không sử dụng con trỏ của Java giúp cho Servlet thoát khỏi nhiều công việc quản lý bộ nhớ. Đồng thời nó xử lý các lỗi rất an toàn theo cơ chế xử lý ngoại lệ của Java.
  • Tính tích hợp. Các Servlet được tích hợp với các Server. Chúng cộng tác với các Server tốt hơn các chương trình CGI.
  • Tính linh hoạt. Các Servlet hoàn toàn mềm dẻo. Một HTTP Servlet được sử dụng để tạo ra một trang Web, sau đó ta có thể sử dụng thẻ <Servlet> để đưa nó vào trang Web tĩnh, hoặc sử dụng với các Servlet khác để lọc ra các nội dung cần thiết.

Thứ Bảy, 1 tháng 10, 2016

JavaServer Pages

JavaServer Pages (JSP): là công nghệ giúp lập trình viên phát triển  Web. Cụ thể hơn ở đây JSP giúp ta có thể chèn các đoạn code java vào trong các HTML page bằng việc sử dụng các JSP tag đặc biệt.

Theo cấu trúc của MVC, JSP có thể được dùng để miêu tả View của ứng dụng cùng với Servlets và Java beans. Java beans có thể implement các model của app còn Servlets được dùng để implement các controller.

***Lí do ta cần JSP:

- JSP thường hoạt động với cùng mục đích như các chương trình độc lập bởi sử dụng Common Gateway Interface (CGI). Nhưng JSP thường có một số lợi thế trong khi so sánh với CGI:

+ Hiệu năng tốt hơn đáng kể bởi vì JSP cho phép nhúng các phần tử động trong chính các HTML page thay vì phải có một CGI file riêng biệt.

+ JSP luôn luôn được biên dịch trước khi nó được xử lý bởi Server, không giống như CGI/Perl mà yêu cầu Server tải một trình thông dịch (Interpreter) và Target Script mỗi khi trang được yêu cầu.

+ JSP được xây dựng ở trên cùng của Java Servlet API, vì thế, giống Servlet, JSP cũng có quyền truy cập tới tất cả Enterprise Java APIs mạnh mẽ, bao gồm JDBC, EJB, JAXP, …

+ JSP được xây dựng ở trên cùng của Java Servlet API, vì thế, giống Servlet, JSP cũng có quyền truy cập tới tất cả Enterprise Java APIs mạnh mẽ, bao gồm JDBC, EJB, JAXP, …

- JSP là một phần toàn bộ của Java EE, một Platform đầy đủ cho các ứng dụng lớp Enterprise. Nghĩa là, JSP có thể hoạt động như là một phần trong các ứng dụng đơn giản nhất cũng như các ứng dụng phức tạp.

- Bên cạnh đó so với các công nghệ khác như ASP, JavaScript, Static HTML thì JSP đều có những điểm nổi trội hơn nhiều lần hoặc rất nhiều lần.
VD: So với  HTML thông thường không thể chứa thông tin động thì ta có thể thấy ngay được sự khác biệt về đẳng cấp của JSP.

***Cấu trúc JSP: 

- Web Server cần một JSP engine như Container để xử lý các JSP page. JSP container có nhiệm vụ chặn các Request cho các JSP page.
- Một JSP container làm việc với Web Server để cung cấp môi trường runtime và các dịch vụ khác mà một JSP cần đến. Nó biết cách để hiểu các phần tử đặc biệt mà là một phần của JSP.
- Tiến trình hoạt động của JSP:
+ Với một trang thông thường  trình duyệt gửi một HTTP request tới Webserver.
+ Web server nhận ra rằng HTTP request là cho một JSP page và chuyển nó tới một JSP engine. Điều này được thực hiện bởi sử dụng một URL hoặc một JSP page mà kết thúc với .jsp thay vì .html.
+ JSP engine tải JSP page từ đĩa và biến đổi nó thành một nội dung Servlet. Sự biến đổi này là rất đơn giản, trong đó tất cả Template Text được biến đổi thành các lệnh printIn() và tất cả phần tử JSP được biến đổi thành Java code mà triển khai các hành vi động tương ứng của trang.
+ JSP engine biên dịch Servlet thành một lớp có thể thực thi và chuyển Request ban đầu tới một Servlet engine.
+ Một phần của Web server triệu hồi Servlet engine tải lớp Servlet và thực thi nó. Trong quá trình thực thi, Servlet này tạo một output trong định dạng HTML, mà Servlet engine truyền tới Web server bên trong một HTTP response.
+ Web server chuyển HTTP Response tới trình duyệt của bạn nội dung HTML tĩnh.
+ Cuối cùng, trình duyệt web xử lý trang HTML đã được tạo một cách năng động bên trong HTTP response một cách chính xác như kiểu nó là một trang tĩnh.

*** JSP Directive

- JSP directive cung cấp các chỉ dẫn và chỉ lệnh tới container để nói cho nó cách để xử lý các lệnh của tiến trình xử lý JSP. Nó thường có form <%@ directive attribute="value" %>.

- Có 3 loại thẻ directive trong JSP:

+ <%@ page ... %> : định nghĩa một thuộc tính page-dependent (phụ thuộc trang), như ngôn ngữ scripting, trang lỗi và các yêu cầu bộ đệm.

+ <%@ include ... %> : include một file trong suốt giai đoạn phiên dịch.

+ <%@ include ... %> : khai báo một thư viện thẻ, chứa các action tùy biến, được sử dụng trong trang đó.


- @pageDiractive JSP:

+  pageDirective trong JSP được sử dụng để cung cấp các chỉ lệnh tới container mà liên quan tới JSP page hiện tại. Bạn có thể mã hóa page directive bất cứ đâu trong JSP page của bạn. Theo qui ước, page directive được mã hóa tại trên cùng của JSP page.  
  
+ form:  <%@ page attribute="value" %>


- @include directive:

+ include Directive trong JSP được sử dụng để bao một file trong suốt giai đoạn phiên dịch. Directive này nói cho container sáp nhập content của file ngoại vi khác với JSP hiện tại trong quá trình phiên dịch. Bạn có thể mã hóa include directive bất cứ đâu trong JSP page.

+ Tên file trong include directive là một URL quan hệ thực sự. Nếu bạn chỉ xác định một tên file mà không có đường liên kết, thì JSP compiler giả sử rằng file đó là trong cùng thư mục như JSP của bạn.

+ form: <%@include = “/404.html” %>


- @taglib directive:

+ Java Server Pages API cho phép bạn định nghĩa các Custom Tags trong JSP, mà giống như các thẻ HTML hoặc XML và một thư việc thẻ (tag library) là một tập hợp các thẻ được định nghĩa bởi người sử dụng mà triển khai các hành vi tùy biến.

+ taglib directive khai báo rằng: JSP page của bạn sử dụng một tập hợp các Custom Tags, thông báo vị trí của thư viện, và cung cấp một phương thức để nhận diện các Custom Tags đó trong JSP page của bạn.

+form: <%taglib uri = “location of the library” prefix=”prefixOfTag” %>


***Processing Data Received from Servlets in JSPs:


 Vòng đời của Servlet gần như tương tự JSP nhưng bổ sung thêm một bước biên dịch từ JSP => Servlet :



***JSP Standard Tag Library (JSTL):

- JavaServer Pages Standard Tag Library (JSTL) là một tập hợp các thẻ JSP hữu ích, mà gói các tính năng lõi phổ biến tới các ứng dụng JSP.

- JSTL hỗ trợ tới các tác vụ phổ biến và có tính cấu trúc, ví dụ như các tính lặp và điều kiện, các thẻ để thao tác tài liệu XML, các thẻ đa ngôn ngữ, và các thẻ SQL. Nó cũng cung cấp Framework để tích hợp các Custom Tags với các thẻ JSTL.

- Các thẻ JSTL có thể được phân loại, theo tính năng của nó, thành các nhóm thư viện thẻ JSTL sau, mà có thể được sử dụng khi tạo một JSP page:

+ Core Tags: Nhóm thẻ cơ bản.

+ Formatting tags: Nhóm thẻ định dạng.

+ SQL tags: Nhóm thẻ SQL.

+ XML tags: Nhóm thẻ XML.

+ JSTL Functions: Nhóm hàm JSTL.


- Core Tag: 

+ Nhóm Core Tags là các thẻ JSTL được sử dụng phổ biến nhất. Sau đây là cú pháp đơn giản để bao thư viện JSTL Core trong JSP.

+ Categories : Variable support, Flow control, URL management, Miscellaneous

- XML Tag:

+ Nhóm XML Tags trong JSTL cung cấp một cách để tạo và thao tác các tài liệu XML. Thư viện thẻ XML Tags trong JSTL có các custom tags để tương tác với XML data. Điều này bao gồm việc parse XML, truyền tải XML data, và điều khiển dòng dữ liệu dựa trên các XPath Expression.

+ Categories : Core tags for XML, Flow control tags for XML, Transformation tags.


- Formatting Tag: Nhóm Formatting Tags trong JSTL được sử dụng để định dạng và hiển thị text, date, time và số ngôn ngữ trong Website.


- SQL Tag: Nhóm SQL Tags trong JSTL cung cấp các thẻ để tương tác với các Relational Database (RDBMSs), ví dụ như Oracle, MySQL, hoặc Microsoft SQL Server.


- JSTL Functions: JSTL bao gồm một số hàm chuẩn, mà hầu hết là các hàm thao tác chuỗi phổ biến. 

***Unified Expression Language:

- JSP Epression Language (EL) giúp dễ dàng truy cập dữ liệu ứng dụng được lưu giữ trong các thành phần JavaBeans. JSP EL cho phép ta tạo các Expression, gồm số học và logic. Bên trong một JSP EL, ta có thể sử dụng các integer, các số floating point, string, các hằng có sẵn true hoặc false cho các giá trị Boolean, và null.
VD: <jsp:setProperty name="box" property="perimeter" value="100"/>

- Có 2 types hỗ trợ cho EL: 

+ Method expressions:  cho phép cách gọi của method để lấy các giá trị của các biểu thức cho các thành phần trong đó thẻ hiện đang đại diện.

+ Value expressions:  là những nơi một giá trị được cung cấp một cách rõ ràng cho biểu thức. Có hai loại giá trị - Rvalue và Lvalues. Rvalues là những giá trị mà không thể sửa đổi và Lvalues có thể thay đổi được.


***Tổng kết

- Ưu điểm.

+ Cho phép chúng ta thiết kế giao diện web dễ dàng hơn.
+ Jsp có thể cho phép chúng ta tạo nên những trang web động.
+ Có thể viết một nơi và chạy bất cứ nơi nào.

- Nhược điểm

+ Nhìn chung thì việc thiết kế giao diện bằng JSP vẫn còn nhiều khó khăn.
+ Tiêu tốn dung lượng lưu trữ phía server gấp đôi.
+ Lần đầu tiên truy cập vào trang JSP sẽ mất nhiều thời gian chờ.


Thứ Năm, 29 tháng 9, 2016

JAVAEE

*** Tổng quan JavaEE:
- Java EE ( Java Enterprise Edition)-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 doanh nghiệp.

-  JavaEE xây dựng dựa trên nền tảng Java SE và cũng cấp thêm một tập các API (giao diện lập trình ứng dụng) để phát triển và hoạt động các ứng dụng phía máy chủ (Server-Side Applications) một cách mạnh mẽ, có khả năng mở rông, đáng tin cậy, di đông (portable) và bảo mật. 



*** Cấu trúc:
- Sử dụng Enterprise Java Beans (EJB) làm lõi cho các ứng dụng của JavaEE. Nói như vậy bởi vì EJB  chứa những business logic của ứng dụng qua đó thao tác với các dữ liệu.

- Xử lý các truy cập của client Chứa metadata, như là thuộc tính của transaction và security, riêng biệt với các bean.

- Cung cấp dịch vụ quản lý transation, quản lý trạng thái, quay vòng tài nguyên và bảo mật.

- Nếu bạn thiết kế 1 ứng dụng không cần có hỗ trợ transaction hoặc bảo mật, lúc đó nên trở lại câu hỏi có nên dùng đến EJB hay không.


 - Được tạo ra và được quản lý bởi một container.

- JaveEE được chia làm 4 Tier: 
+Client Tier : Run trên Máy Client

+Web Tier : Run trên Java EE Server (application server)

+Business Tier : Run trên Java EE Server(application server)

+EIS Tier : Run trên Java EE Server



***Container Component và API

-  Application Programming Interface (API): mỗi hệ điều hành, ứng dụng đều có những bộ API khác nhau. Nó cung cấp cho người lập trình các hàm tương tác với CSDL, lập trình thực hiện các thao tác với hê điều hành hay phần mềm đó. Hầu hết các hàm API được chứa trong các file DLL.

+ javaserver pages standard tag library (JSTL):  là thư viện thẻ chuẩn cung cấp các thẻ để kiểm soát hành vi trang, lặp đi lặp lại và các lệnh điều khiển, các thẻ quốc tế hóa, và các thẻ SQL.

+java persistence api (JPA): là một đặc tả Java dùng cho việc truy xuất, lưu trữ/truy vấn và quản lý dữ liệu giữa các đối tượng Java/class với CSDL quan hệ. JPA trở thành chuẩn trong cách tiếp cận Object to Relation Mapping (ORM) trong ngành công nghiệp Java. Thông qua JPA, nhà phát triển có thể ánh xạ (map), lưu trữ, cập nhật và lấy dữ liệu từ CSDL thành Java object và ngược lại mà  không cần cài đặt bất cứ interface hoặc phương thức nào.

+java api for restful web services( ReST): Là một dịch vụ web đơn giản sử dụng HTTP và tính chất của REST.Nó tuân thủ theo 4 nguyên tắc thiết kế cơ bản sau:
§       ++ Sử dụng các phương thức HTTP một cách rõ ràng
§       ++ Phi trạng thái
§       ++ Hiển thị cấu trúc thư mục như URls
§       ++ Chuyển đổi linh hoạt JavaScript Object Notation (JSON) và XML hoặc cả hai.    

+managed bean: Managed Bean là một chương trình Java Bean, trong đó có các getter và setter, business logic kinh doanh hoặc backing bean.

+contexts and dependency injection in java ee 7(CDI): nó hỗ trợ java EE platfrom, giao tiếp giữa Java Server Face (JSF) và JavaBean cũng như enterprise Bean (EJB), có thể  khởi tạo các đối tượng Java thuần túy và inject vào các đối tượng Java thuần túy khác.

+java authorization contract for containers(JACC): API cung cấp giấy phép chứng chỉ (theo em hiểu là như thế :v )

+bean validation: bao gồm các quy tắc và API phục cho việc xác minh tính đúng đắn của dữ liệu trong các đối tượng của Java Bean.

+java transaction api (JTA): một tập API cho phép quản lý transaction. Ứng dụng có thể sự dụng JTA để start, commint, abord transaction.

+java mail: một API cung cấp 1 framework platform-independent và protocol-independent (không phụ thuộc giao thức về platform) để xây dựng ứng dụng về mail và messaging.

+java messaging service api: một API để giao tiếp với Message Oriented Middleware (MOM) cho phép truyền nhận message theo cơ chế point-to-point và publish/subcribre.

+java ee connector architecture: cung cấp giải pháp công nghệ Java cho vấn đề kết nối giữa nhiều máy chủ ứng dụng và các hệ thống thông tin doanh nghiệp.

+java websocket api: là một Application Programming Interface cho phép các trang web sử dụng giao thức WebSockets cho thông tin liên lạc hai chiều với một máy chủ từ xa.

+java api for json processing(JSONP): JSONP cung cấp các API di động cho việc phân tích, tạo, chuyển đổi, và JSON querry.

+concurrency utilities: lập trình đồng thời (concurrent programming), bao gồm các lệnh, từ khóa, lớp đối tượng ngay trong ngôn ngữ lập trình lẫn thông qua chức năng cung cấp bởi các thư viện hỗ trợ.

+javabean application framework:  tập các API được sử dụng bởi các package khác như là JavaMail,…Bạn có thể dùng JAF để xác định kiểu dữ liệu, đóng gói truy cập đến dữ liệu đó, mở rộng những tác vụ dựa trên dữ liệu đó và khởi tạo một bean tương ứng để thực hiện những tác vụ đó. 



- container component: Mô hình này được hình thành dựa trên bốn container component cốt lõi cung cấp môi trường cho các component khác của J2EE thông qua các API. Những component cốt lõi này liên quan đến bốn kiểu container được hỗ trợ trong JEE  bao gồm Application Client, Applet, Web và EJB.

+ Application Client: dùng để cung cấp những API hỗ trợ cho messaging, remote invocation, database connectivity và lookup service.

+ Applet component: là java applet chạy bên trong Applet container, chính là web browser có hỗ trợ công nghệ Java. Applet phải hỗ trợ JSE API.

+ Web  containe: đây là Web-based component chạy ở bên trong Web container, được hỗ trợ bởi Web Server. Web container là một môi trường run-time cho servlet và jsp.

+ Enterprise JavaBean (EJB):  EJB container cung cấp các dịch vự quản lý transaction, bảo mật, quản lý trạng thái, quay vòng tài nguyên (resource pooling).  



***Mô Hình MVC


 - Model – View – Controller (MVC) là một mẫu thiết kế nhằm mục tiêu chia tách phần Giao diện và Code để dễ quản lý, phát triển và bảo trì. MVC chia ứng dụng phần mềm ra làm 3 phần có tương tác với nhau là Model(Dữ liệu), View(Giao diện), Controller( Code điều khiển tương tác giữa Model và View cũng như nghiệp vụ (Business)).

  • - Model là lớp chứa thông tin đối tượng (Dữ liệu), tương tác với Database. Chịu trách nhiệm chính trong mô hình hóa đối tượng.

  • - View là giao diện của hệ thống tương tác trực tiếp với người dùng.

  • - Controller nhận yêu cầu từ người dùng và sử dụng Model và View để xử lý và trả kết quả cho người dùng.

Browser(Client) ----(Request)----> Controller -----(EXCUTON)----> Model ------(RESULTING)-----> Controller ------(RESULTING)----> View -----(GUI CONTEXT)----> Controller ----(Response)----> Browser.



***Kết: 
- Java EE 7 đơn giản hóa với một nền tảng tích hợp, gắn kết, qua đó giảm bớt yêu cầu viết mã phần mềm

- Nâng cao hiệu suất + khả năng di chuyển ứng dụng bằng khả năng hỗ trợ máy khách dịch vụ web RESTful tiêu chuẩn.

- -Cung cấp các tính năng mới có thể đáp ứng những yêu cầu của doanh nghiệp hiện nay.





+