Thứ Năm, 27 tháng 10, 2016

Servlet

Java Servlets 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.
Sử dụng Servlets, bạn 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.
Java Servlets thường có chung mục đích: là các chương trình độc lập bởi việc sử dụng Common Gateway Interface (CGI). Nhưng so với CGI, thì Servlets có các lợi thế sau:
  • Hiệu năng tốt hơn đáng kể.
  • Servlets thực thi bên trong không gian địa chỉ của một Web server, không cần thiết phải tạo một tiến trình riêng biệt để xử lý mỗi yêu cầu từ Client.
  • Servlets là độc lập trên nền tảng bởi vì chúng được viết bằng Java.
  • Bởi vì viết bằng Java (mà Java cung cấp tình bảo mật cao trên Server) nên Servlets là đáng tin cậy.
  • Tính năng đầy đủ của thư viện của các lớp trong Java là luôn luôn có sẵn cho Servlets. Nó có thể giao tiếp với Applet, Database hoặc phần mềm khác thông qua các Socket và kỹ thuật RMI mà bạn đã từng thấy.

Vòng đời của Servlets

Một chu kỳ sống servlet có thể được định nghĩa là toàn bộ quá trình từ sáng tạo của nó đến sự hủy diệt.Sau đây là các đường dẫn theo sau là một servlet
  • Servlet được khởi tạo bằng cách gọi init () method.
  • Các cuộc gọi servlet service() method để xử lý yêu cầu của khách hàng.
  • Servlet được hủy bằng cách gọi destroy () method.
  • Cuối cùng, servlet là rác thải được thu thập bởi các bộ thu rác của JVM.
Bây giờ chúng ta thảo luận về các phương pháp vòng đời chi tiết.

The init() method :

  • init() method được thiết kế để được gọi là chỉ một lần. Nó được gọi là khi servlet đầu tiên được tạo ra, và không được gọi là một lần nữa cho mỗi yêu cầu người sử dụng. Vì vậy, nó được sử dụng để khởi tạo một lần, cũng như với các init() method của applet.
  • Servlet thường được tạo ra khi một người sử dụng đầu tiên gọi một URL tương ứng với servlet, nhưng bạn cũng có thể xác định rằng các servlet được nạp khi máy chủ đầu tiên được bắt đầu.
  • Khi người dùng kích hoạt một servlet, một trường hợp duy nhất của mỗi servlet được tạo ra, với mỗi yêu cầu người sử dụng kết quả trong một chủ đề mới được bàn giao cho doGet hay doPost cho phù hợp.Phương thức init () chỉ đơn giản là tạo ra hoặc tải một số dữ liệu sẽ được sử dụng trong suốt cuộc đời của servlet.

The service() method :

  •  method là phương pháp chính để thực hiện các công việc thực tế. Servlet container (tức là máy chủ web) gọi service() để xử lý request từ client (trình duyệt) và viết các response định dạng lại cho client.
  • Mỗi khi máy chủ nhận được một request cho một servlet, máy chủ sẽ tạo ra một thread mới và call service. Các service () kiểm tra loại Request HTTP (GET, POST, PUT, DELETE, vv) và gọi các method doGet, doPost, doPut, doDelete phù hợp.

Cấu trúc Servlet API

  • javax.servlet package chứa 1 abstract class tên là GenericServlet
  • Các GenericServlet kế thừa từ lớp Object và giúp thiết kế một giao thức servlet độc lập
  • Các GenericServlet triển khai interface:
  • ServletConfig: định nghĩa các method được sử dụng bởi Servlet container để truyền thông tin tới 1 Servlet mà nó khởi tạo.
  • Serializable: được định nghĩa trong java.io package để sắp đặt trạng thái của 1 đối tượng.
  • Lớp HTTPServlet là một lớp con của GenericServlet và cho phép để tạo ra một Servlet dựa trên HTTP như là một phần của một ứng dụng Web.


    Continuous Integration

    Với nhiều bạn khái niệm Continuous Integration (Tích hợp liên tục - CI) là một cái gì đó xa lạ. Hôm nay mình sẽ giúp các bạn hiểu thế nào là CI và vận dụng nó vào trong công việc phát triển phần mềm.

    CI là gì?

    Tích hợp liên tục (CI) là phương pháp phát triển phần mềm đòi hỏi các thành viên trong nhóm tích hợp công việc thường xuyên. Mỗi ngày, các thành viên đều phải theo dõi và phát triển công việc của họ ít nhất một lần. Việc này sẽ được một nhóm khác kiểm tra tự động, nhóm này sẽ tiến hành kiểm thử truy hồi để phát hiện lỗi nhanh nhất có thể. Cả nhóm thấy rằng phương pháp tiếp cận này giúp giảm bớt vấn đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn — Thư viện phát triển phần mềm của IBM
    Continuous IntegrationVòng đời phát triển phần mềm theo phương pháp CI

    Tại sao nên dùng CI ?

    Sử dụng phương pháp CI giúp cho hệ thống luôn đảm bảo là build được và chạy đúng (do phải pass qua toàn bộ test case). Mặt khác các công đoạn test sẽ được hệ thống CI server thực hiện tự dộng giúp cho ta có thể dễ dàng biết được tình trạng của một branch, một commit nào đó và không cần lấy source về test thử. Do đó tốc độ phát triển được tăng lên. Đây cũng là lý do mà nhiều team phát triển theo mô hình Agile lựa chọn phương pháp này.

    Một ví dụ tổng quát về việc sử dụng các công cụ, dịch vụ phối hợp với nhau để thực hiện Continous Integration (CI) trong quá trình phát triển phần mềm.

    Mô hình tổng quan gồm có những gì ?

    CloudFormation : một dịch vụ của AWS hỗ trợ việc quản lý, xây dựng các tài nguyên trên Amazon Web Service (AWS) một cách tự động thông qua các APIs và Json templates.
    Chức năng : cung cấp các tài nguyên cần thiết trên AWS cho dự án, trong ví dụ này chúng ta sẽ cần :
      01 EC2 instance để cài đặt Jenkins (CI server)
      01 ELB xử lý việc cân bằng tải
      01 RDS instance cho lưu trữ dữ liệu
      01 ECS cluster để chạy, điều phối các docker containers
      01 ECR registry để lưu trữ các docker images


    Ansible : một công cụ, ngôi sao đang lên, trong việc quản lý cấu hình tự động cho các machines.
    Chức năng : cung cấp việc cài đặt và thiết lập môi trường cũng như các packages cần thiết cho CI server :

      Nginx với chức năng reverse proxy cho jenkins
      Jenkins với chức năng CI server
      Docker với chức năng build docker image
      Aws CLI tương tác với ECS, ECR qua dòng lệnh
    Jenkins : CI server, một sản phẩm mã nguồn mở giúp tự động hóa các công việc building, deploying các phần mềm, dự án.
    Chức năng : cung cấp hõ trợ cấu hình chạy unit test, build, deploy cho dự án.

    Docker : một công cụ giúp đóng gói và phân phối ứng dụng dễ dàng, đa nền tảng. 
    Chức năng : đóng gói và phân phối các ứng dụng thông qua các docker images.

    ECS : EC2 Container Service. Một dịch vụ của AWS thực hiện việc điều phối, quản lý, liên kết các docker container để làm việc hiệu quả.
    Chức năng : cung cấp việc vận hành và điều phối các docker containers.

    ECR : EC2 Container Registry. Một dịch vụ của AWS để lưu trữ các docker images, chức năng tương tự như DockerHub. Từ đấy các hệ thống có thể lấy docker image theo yêu cầu.

    Vậy các bộ phận trên phối hợp với nhau như thế nào ?


      1. Engineer push code tới git repository
      2. Jenkins định kỳ kiểm tra và pull code mới về
      3. Jenkins chạy Unit test
      4. Jenkins chạy docker build để đóng gói ứng dụng vào docker image
      5. Jenkins pushs docker image tới ECR
      6. Jenkins trigger deploy tới ECS để lấy docker image mới từ ECR
    Các bước trên được thực hiện tuần tự cho tới khi tất cả các bước được hoàn thành tạo nên một chu trình khép kín CI.

    Như vậy chúng ta đã có một mô hình tổng quát về CI tích hợp các công cụ có sẵn AWS, Docker, Jenkins, Ansible. Việc tích hợp CI sẽ đẩy nhanh quá trình phát hiện lỗi thông qua việc tự động hóa. Giúp cho người viết mã có thể sớm sửa lỗi, góp phần tăng tốc quá trình đưa những cập nhật mới của ứng dụng tới người dùng.


    Thứ Năm, 13 tháng 10, 2016

    Căn bản về RESTful Web services

    REST định nghĩa các quy tắc kiến trúc để bạn thiết kế Web services chú trọng vào tài
    nguyên hệ thống, bao gồm các trạng thái tài nguyên được định dạng như thế nào và được chuyển tải qua HTTP thông qua số lượng lớn người dùng và được viết bởi những ngôn ngữ khác nhau. Nếu tính theo số dịch vụ mạng sử dụng, REST đã nổi lên trong vài năm qua như là một mô hình thiết kế dịch vụ chiếm ưu thế. Trong thực tế, REST đã có những ảnh hưởng lớn và gần như thay thế SOAP và WSDL vì nó đơn giản và dễ sử dụng hơn rất nhiều.
    REST là một bộ quy tắc để tạo ra một ứng dụng Web Service, mà nó tuân thủ 4 nguyên tắc thiết kế cơ bản sau:

    1. Sử dụng các phương thức HTTP một cách rõ ràng
    2. Phi trạng thái
    3. Hiển thị cấu trúc thư mục như các URls
    4. Truyền tải JavaScript Object Notation (JSON), XML hoặc cả hai.

    Nguyên tắc 1: Sử dụng các phương thức HTTP một cách rõ ràng
    Thiết lập một ánh xạ 1-1 giữa các hành động: tạo, đọc, cập nhật và xoá (CRUD) các quá trình vận hành và các phương thức HTTP:



    • POST (HttpPost) – Tạo một tài nguyên trên máy chủ
    • GET (HttpGet) – Truy xuất một tài nguyên
    • PUT (HttpPut) – Thay đổi trạng thái một tài nguyên hoặc để cập nhật nó
    • DELETE (HttpDelete) – Huỷ bỏ hoặc xoá một tài nguyên



    Nguyên tắc 2: Phi trạng thái
    Ta xem mô hình giữa trạng thái và phi trạng thái để dễ so sánh:
    Mô hình phi trạng thái:
    h68-2Mô hình trạng thái:
    h68-1Nguyên tắc 3: Hiển thị cấu trúc thư mục như URls
    Cấu trúc địa chỉ của RESTful service:



    • Giấu các đuôi tài liệu mở rộng của bản gốc trong máy chủ (.jsp, .php, .asp).
    • Để mọi thứ là chữ thường (thực ra là không phân biệt, nhưng cũng nên tuân thủ để khỏi phải nhớ HOA-thường lung tung).
    • Thay thế các khoảng trống bằng gạch chân hoặc gạch nối (một trong hai loại).
    • Tránh các chuỗi yêu cầu.
    • Thay vì sử dụng mã (404 Not Found) khi yêu cầu địa chỉ cho một phần đường dẫn thì luôn luôn cung cấp một trang mặc định hoặc tài nguyên như một phản hồi.



    Nguyên tắc 4: Chuyển đổi JavaScript Object Notation (JSON) và XML hoặc cả hai.



     - Là một bản tóm tắt các thuộc tính của những thứ trong mô hình dữ liệu hệ thống.
     - Định dạng dữ liệu mà ứng dụng và trao đổi dịch vụ trong mức đáp ứng yêu cầu/ phản hồi hoặc trong phần thân của HTTP.
     - Các chủ thể trong mô hình dữ liệu có liên quan với nhau.
     - Cấu trúc dịch vụ sao cho nó tận dụng được phần đầu chấp nhận HTTP có sẵn bên trong – một loại MIME



    Kết Luận:REST đã nổi lên trong vài năm qua như là một mô hình thiết kế dịch vụ chiếm ưu thế. Trong thực tế, REST đã có những ảnh hưởng lớn và gần như thay thế SOAP và WSDL vì nó đơn giản và dễ sử dụng hơn rất nhiều. Với REST hệ thống không chỉ dễ mở rộng, dễ bảo trì mà còn linh động trong việc cung cấp các kiểu ứng dụng với các dữ liệu khác nhau.



    Ví dụ vế EJB

    *Tạo 1 database Person gồm các trường:
    -Id int primary key,
    -Name varchar(30),
    -Age int,
    -Address varchar(30)

    1-Đầu tiên tạo 1 project EJB


    2-Kết nối với Database đã tạo ở trên dùng Entity Classes.Các đối tượng và phương thức sẽ tự sinh ra


    *Nếu muốn tự viết các phương thức bạn có thể add Business Method

    3.Tạo các view và controller như sau

    4.Trong servlet call Enterpise Bean tới đã tạo ở trên



    5.Viết các đoạn code thêm,sửa,xóa như sau cách làm đã chú thích trong code:










    Vậy là xong hãy chạy để xem thành quả.



    Thứ Ba, 11 tháng 10, 2016

    Giới thiệu về JSF

    SF là một môi trường phát triển GUI khá truyền thống, giống như AWT, SWT, và Swing. Một trong những lợi ích chính của nó là nó làm cho việc phát triển Web dễ dàng hơn bằng cách giao những công việc khó khăn cho các nhà phát triển khung công tác, chứ không phải cho các nhà phát triển ứng dụng. Cứ cho là bản thân JSF phức tạp hơn nhiều so với các khung công tác Web khác, nhưng sự phức tạp này được che giấu không để cho các nhà phát triển ứng dụng biết. Phát triển các ứng dụng Web trong JSF dễ dàng hơn nhiều so với hầu hết các khung công tác khác: nó đòi hỏi viết mã ít hơn, ít phức tạp hơn, và ít việc cấu hình hơn.
    Nếu bạn đang thực hiện phát triển Java phía máy chủ, JSF là khung công tác dễ nhất để tìm hiểu. Nó được định hướng để tạo các ứng dụng Web (không chỉ là các trang web). Nó cho phép bạn tập trung vào việc mã hóa Java của bạn mà không cần đối phó với các đối tượng yêu cầu, các đối tượng phiên, các thông số yêu cầu, hoặc đối phó với các tệp tin XML phức tạp. Với JSF, nhiều thứ thực hiện nhanh hơn so với các khung công tác Web Java khác.
        I. Ưu điểm của JSF:

    • Tách biệt hoàn toàn giữa hành vi và cách trình bày
    • Kiểm soát tính có trạng thái (statefulness) ở mức thành phần
    • Các sự kiện dễ dàng được liên kết với mã phía máy chủ
    • Sử dụng các khái niệm thành phần UI và tầng Web (Web-tier) quen thuộc
    • Cung cấp nhiều dụng cụ của nhà sản xuất phần mềm đã tiêu chuẩn hóa
    • Sự hỗ trợ IDE tuyệt vời.

      II.Thành phần của JSF:
    • JavaBeans để quản lý trạng thái và hành vi của ứng dụng
    • Các thành phần GUI có trạng thái
    • Phát triển hướng sự kiện (thông qua các trình nghe-listener) giống như trong phát triển GUI truyền thống
      III. Công nghệ JSF và JSP:
    Giao diện người dùng của một ứng dụng JSF bao gồm các trang JavaServer Pages (JSP). Mỗi trang JSP có chứa các thành phần JSF để thể hiện chức năng GUI. Bạn sử dụng các thư viện thẻ tùy biến JSF bên trong các trang JSP để biểu hiện các thành phần UI, để đăng ký trình xử lý sự kiện, để kết hợp các thành phần với các trình duyệt tính hợp lệ (validator), để kết hợp các thành phần với các trình biến đổi dữ liệu (converter), và nhiều hơn nữa.
    JSF không có gì để làm với bản thân JSP. JSF làm việc với JSP thông qua một cầu nối thư viện thẻ JSP. Tuy nhiên, vòng đời của JSF là rất khác so với vòng đời của JSP. Facelets phù hợp với JSF hơn nhiều so với JSP vì Facelets đã được thiết kế với JSF trong tâm trí, trong khi việc kết hợp JSF và JSP luôn luôn giống như bắt một miếng gỗ hình vuông vào trong một lỗ tròn. Bạn nên suy nghĩ về Facelets; các tính năng của Facelets sẽ là một phần của JSF 2.0
      IV.JSF và MVC:
    JSF là kết quả của các bài đã học thu được qua nhiều năm phát triển của các kỹ thuật phát triển Web trên nền tảng Java. Xu hướng này bắt đầu với công nghệ JSP, cho dù có nhiều ưu điểm, đã làm cho quá dễ dàng trộn lẫn mã Java với mã HTML (và mã giống như HTML). Bước tiến tiếp theo là kiến trúc Mô hình 1trong đó các nhà phát triển đẩy hầu hết mã mặt sau vào trong các thành phần JavaBeans và sau đó nhập khẩu các thành phần JavaBeans vào các trang Web với thẻ <jsp:useBean>. Điều này đã hoạt động tốt với các ứng dụng Web đơn giản, nhưng nhiều nhà phát triển Java không thích kết hợp công nghệ JSP với các đặc tính C++ ví dụ như là lệnh bao gồm (include) tĩnh. Vì vậy, kiến trúc Mô hình 2 đã được giới thiệu.
    Về cơ bản, kiến trúc Mô hình 2 là phiên bản MVC thấp hơn cho các ứng dụng Web. Trong kiến trúc Mô hình 2, trình điều khiển được thể hiện bằng các servlet (hoặc các Action) và việc hiển thị được giao cho các trang JSP. Struts của Apache là một thực thi Mô hình 2 đơn giản hoá, nơi mà các Action thế chỗ các servlet. Trong Struts, logic của trình điều khiển ứng dụng được tách ra khỏi các dữ liệu của nó (được biểu diễn bằng ActionForms). Các lời phàn nàn chủ yếu chống lại Struts là có thể cảm thấy nó có nhiều tính thủ tục hơn hướng đối tượng (“COBOL cho Web”). WebWork và Spring MVC là hai kiến trúc Mô hình 2 khác để cải tiến Struts để ít tính thủ tục hơn, nhưng cả hai đều không được chấp nhận rộng rãi như là Struts. Và cả hai cũng không cung cấp một mô hình thành phần có trạng thái như JSF đã làm. (Struts 2 được xây dựng bên trên WebWork, và cơ sở mã lệnh Struts ban đầu đã bị loại bỏ. Ngay cả Struts cũng không muốn).
    Vấn đề thực sự với hầu hết các khung công tác Mô hình 2 là ở chỗ mô hình sự kiện quá đơn giản (chủ yếu là một MVC thu nhỏ nhiều), và nó không có thành phần GUI có trạng thái, để lại quá nhiều công việc cho nhà phát triển. Một mô hình thành phần và sự kiện phong phú hơn sẽ làm cho dễ dàng tạo ra các loại tương tác mà hầu hết người dùng mong đợi. Cũng giống như công nghệ JSP, hầu hết các khung công tác của Mô hình 2 cũng làm cho quá dễ dàng trộn lẫn bố trí và định dạng HTML với các thẻ tùy biến GUI, hoạt động hơi giống như các thành phần, ngoại trừ là chúng không có trạng thái. Và một số kiến trúc Mô hình 2 (như Struts kinh điển) phạm lỗi tách biệt hành vi với trạng thái, đã mang lại cho nhiều nhà phát triển Java cảm giác như họ đang lập trình COBOL.
    Lưu ý: JSF không phải là Struts. JSF không phải là một khung công tác Mô hình 2. Nó có nhiều hơn thế. Nhiều người tin rằng do tác giả ban đầu của Struts đã là người lãnh đạo đặc tả kỹ thuật JSF, nên các kỹ năng Struts có thể được sử dụng trên một dự án JSF. Đừng cố gắng lập trình JSF giống như Struts. Bạn cần phải từ bỏ một số kỹ năng Struts của bạn và học các kỹ năng JSF.

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

    Thêm,Sửa,Xóa dữ liệu trong Database bằng JSP và Servlet

    Đâu tiên chúng ta mở netbean và tạo 1 project mới
    File - New Project - Java wed - Wed Application
    Trong thư mục Source tạo các Java Package va các trang JSP như hình
    trong package com.crud.controller tạo các Servlet còn các package khác là JavaClass


    Các bạn tạo 1 database có 1 bảng gồm các trường Id,Name,Age,Address rồi insert 1 ít dữ liệu vào để test
    *Đầu tiên sẽ show toàn bộ dữ liệu trong database làm từng bước theo hình dưới đây trong code mình đã comment cách dùng các dòng code.
    -Tạo class Persson


    Tạo Model

    -Tạo class kết nối

    -Lấy dữ liệu từ db


    -Chuyển dữ liệu xuống view bằng Controller(servlet)


    -Show Kết Quả

    -Và đây là kết quả.các bạn hãy đọc các comment trong trang index.jsp để làm các bước sau dễ dàng hơn
    Tiếp theo hãy chép toàn bộ code này vào class PersonDataAccess nó gồm các phuong thức thêm sửa xóa bài này mình chỉ nói ve cách sử dung jsp và servlet nên code java này ko có comment gì.

    *Tiếp theo là thêm
    Các bạn xem lại trang index.jsp.Khi ta ấn link thêm mới thì nó sẽ request tơi servlet addPerson và servlet này sẽ chuyển tới trang add.jsp
    Tạo trang add.jsp như sau
    Khi ấn nút save trên form thì trang jsp này sẽ tieps tục gọi đến servlet AddPost.

    *Sửa
    Khi click vào link edit trên trang index thì sẽ gọi đến servlet UpdatePerson và sẽ chuyen den trang update.jsp

    click save sẽ gọi tới servlet UpdatePost và sau khi update se chuyen lại trang index
    *Xóa 
    Khi click vào link delete trên trang index thì sẽ gọi đến servlet DeletePerson
    Xong xuôi bạn hãy chạy để xem thành quả.Chúc bạn thành công


    Khái niệm về EJB

    I. Giới thiệu về EJB

    - EJB (Enterprise JavaBeans) là một thành phần bên phía server, nó được sử dụng cho việc phát triển các ứng dụng với quy mô lớn (Một hệ thống với nhiều chức năng, lượng truy cập nhiều).
    - Nó đóng gói, chứa đựng các nghiệp vụ logic của ứng dụng.
    - Nó là một nền tảng được sử dụng cho việc phát triển các ứng dụng có thể chạy trên nhiều nền tảng (như LINUX, WINDOWS), có tính tái sử dụng các thành phần của ứng dụng (Viết một lần và sẽ được dùng lại), ngoài ra nó là nền tảng mà phục vụ cho các ứng dụng có quy mô lớn sử dụng ngôn ngữ JAVA.
    1. EJB là một thành phần.
    - Thứ nhất thì ta nên hiểu khái niệm Component là gì: Component chính là một đoạn code mà nó sẽ đưa ra các hành vi của các khái niệm trong thế giới thực.
    - Nó có thể được sử dụng trong các ứng dụng khác nhau (Vì tính không phụ thuộc vào nền tảng và nó là một phần có thể tách rời và tái sử dụng).
    - EJB là một thành phần bên phía SERVER SIDE có thể được sử dụng để xây dựng các phần khác nhau của ứng dụng hoặc là một ứng dụng hoàn chỉnh.
    - Yêu cầu chính của một thành phần là cái mà nó nên gói gọn các hành vi, tương tác của ứng dụng.
    2.Tại sao cần dùng EJB 3.0
    - Nó khá đơn giản, vì nó chỉ là một lớp java thông thường và ta sẽ gắn các annotation (Chú thích).
    - Nó có tính tái sử dụng cao vì nó là một thành phần mà mang trong nó một số nghiệp vụ nhất định.
    - Nó có khả năng phục vụ cho việc phát triển các ứng dụng lớn với lượng truy cập người dùng nhiều (có thể lên tới vài chục triệu).
    3. Không nên sử dụng EJB trong các trường hợp sau.
    - Những cái ứng dụng mà thuộc loại chỉ làm một lần mà không làm lại lần thứ 2 một ứng dụng tương tự như vậy, lượng người dùng ít, không cần đến quản lý các giao dịch và nhu cầu bảo mật không cao.
    - Những ứng dụng mà có thể chạy trên đa nền tảng.
    Sơ đồ của ứng dụng lớn được chia làm nhiều tầng:
    Việc giao tiếp của SERVER.


    II. Vai trò của EJB
    - Với EJB việc quản lý các ứng dụng mang tính chất enterprise trở nên dễ dàng hơn.
    - Nó có vai trò rất to lớn trong việc phát triển ứng dụng enterprise vì nó là một thành phần và có thể được dùng lại ở các ứng dụng khác.

    III. Nhận xét chung
    - Tuy rằng việc EJB có rất nhiều ưu điểm tuy nhiên khi bắt đầu mới học,  các lỗi xảy ra rất nhiều gây khó khăn.
    - EJB có rất nhiều các ứng dụng mã nguồn mở, vì thế rất tiện lợi cho việc tham khảo.
    - Tuy nhiên EJB chỉ phù hợp cho những ứng dụng lớn mang tính chất enterprise.



    Thứ Ba, 4 tháng 10, 2016

    JSP và Servlet

    JSP(Java server page):là một công nghệ để phát triển các Webpage mà hỗ trợ nội dung động, giúp các lập trình viên chèn java code vào trong các HTML page bằng việc sử dụng các JSP tag đặc biệt, hầu hết bắt đầu với <% và kết thúc với %>.
    Một thành phần JavaServer Pages (JSP) là một loại Java Servlet, được thiết kế để thực hiện vai trò của một giao diện người dùng (User Interface) cho một ứng dụng Java Web. Lập trình viên Web viết JSPs như là các text file mà kết nối HTML code hoặc XHTML code, phần tử XHTML, và các JSP actions và câu lệnh JSP được nhúng.
    Sử dụng JSP, bạn có thể thu thập input từ người dùng thông qua các Webpage Form, trình bày các record từ một Database hoặc đăng ký quyền ưu tiên của người dùng, truy cập các thành phần JavaBeans, truyền điều khiển giữa các page và chia sẻ thông tin giữa các Request, page, …
    *Ưu và nhược điểm của JSP
    a. Ư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.
    b. 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ờ.
     Các thành phần của trang JSP.
    a. Thẻ RootThẻ này sẽ chứa các thuộc tính, thông tin của trang  jsp.
    b. Comment- Cũng như trang html, trong jsp cũng cho phép chúng ta có thể comment. Để comment chúng ta dùng kí hiệu này:    <!  your comment  -->
    c. Declaration.- Chúng ta có thể khai báo biến hoặc phương thức của java ngay trong trang jsp như một trang ngôn ngữ kịch bản. Nhưng nếu như khai báo quá nhiều trong trang thì sẽ bị nhầm lẫn giữa code jsp và code java. Cú pháp khai báo là <%! your code %>
    d. Expression- Một JSP Expression được sử dụng để chèn một giá trị vào trong trang jsv một cách trực tiếp.- Thẻ biểu thức JSP được sử dụng để đánh giá một biểu thức và định hướng các output đến một trình duyệt web phù hợp.Cú pháp khai báo là: <%= your code %>

    e. Scriptlet Tag : - Scriptlet Tag cho phép bạn viết mã java trong trang JSP. Cú pháp của Scriptlet Tag như sau :   <% <i> mã java </ i>%>
    f. Directive Elements:- Một JSP directive cung cấp thông tin đặc biệt cũng như các phương tiện của trang jsp.- Directive Elements gồm có 3 thẻ như hình dưới:

    
    - JSP cung cấp  Standard Tag(Action Element)  để sử dụng trong các trang JSP của bạn. Các thẻ được sử dụng để loại bỏ hoặc loại bỏ mã scriptlet từ trang JSP của bạn bởi vì scriplet mã được về mặt kỹ thuật không được khuyến cáo hiện nay.
    - Standard tags bắt đầu với tiền tố jsp <code>: </ code>. Có rất nhiều JSP Standard Action tag được sử dụng để thực hiện một số nhiệm vụ cụ thể.
    - Sau đây là một số JSP Standard Action Tag thường dùng:

                           

    Cách sử dụng jsp:dùng jsp làm view trong ứng dụng mvc pattern(jsp có thể làm vẫn có thể làm được các nhiêm vụ khác nhưng để thuận tiện cho việc debug hay tái sử dụng các đoạn mã thì người ta thường dùng làm view còn servlet sẽ làm controller.)


    II.Java Servlets: 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.
    Sử dụng Servlets, bạn 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.
    Java Servlets thường có chung mục đích: là các chương trình độc lập bởi việc sử dụng Common Gateway Interface (CGI). Nhưng so với CGI, thì Servlets có các lợi thế sau:
    • Hiệu năng tốt hơn đáng kể.
    • Servlets thực thi bên trong không gian địa chỉ của một Web server, không cần thiết phải tạo một tiến trình riêng biệt để xử lý mỗi yêu cầu từ Client.
    • Servlets là độc lập trên nền tảng bởi vì chúng được viết bằng Java.
    • Bởi vì viết bằng Java (mà Java cung cấp tình bảo mật cao trên Server) nên Servlets là đáng tin cậy.
    • Tính năng đầy đủ của thư viện của các lớp trong Java là luôn luôn có sẵn cho Servlets. Nó có thể giao tiếp với Applet, Database hoặc phần mềm khác thông qua các Socket và kỹ thuật RMI mà bạn đã từng thấy.
    Cấu trúc của Servlets
    Cấu trúc Servlets
    Nhiệm vụ của Servlets
    Sơ đồ dưới đây minh họa cấu trúc của Servlets trong một ứng dụng web:
    Servlets thực hiện các tác vụ chủ yếu sau:
    • Đọc dữ liệu hiển thị (explicit) được gửi bởi Client (hoặc trình duyệt) bao gồm một HTML Form trên một trang web hoặc nó cũng có thể từ một Applet hoặc một chương trình Custom từ HTTP Client.
    • Đọc dữ liệu yêu cầu HTTP ẩn (implicit) được gửi bởi Client (hoặc trình duyệt) bao gồm cookie, các loại media.
    • Xử lý dữ liệu và cho ra kết quả. Tiến trình này có thể yêu cầu Database, đang thực thi một triệu hồi tới RMI hoặc CORBA, triệu hồi một Web Service, hoặc tính toán phản hồi một cách trực tiếp.
    • Gửi dữ liệu hiển thị (ví dụ: tài liệu) tới các Client (hoặc trình duyệt). Tài liệu này có thể được gửi theo nhiều định dạng khác nhau, gồm text (HTML hoặc XML), nhị phân (hình ảnh GIF), Excel, .v.v.
    • Gửi phản hồi HTTP ẩn tới các Client (hoặc trình duyệt), thông báo cho trình duyệt hoặc Client về kiểu của tài liệu được trả về (ví dụ: HTML), thiết lập các Cookie và Caching các tham số, cùng các tác vụ khác.
    Ưu và nhược điểm của servlet:
    * Ưu điểm- Có độ bảo mật cao.- Có hiệu năng và khả năng mở rộng cao.- Truy cập được tất cả Java API- Có nhiều tools bên phía Third - Party và JavaServlet được nhiều Webserver hỗ trợ.- Độc lập Platform và Server- Hầu hết các server đều cho phép load lại Servlet khi có thay đổi
    * Nhược điểm- Là một công nghệ đã cũ nên có rất nhiều hạn chế và khó khăn khi làm việc với giao diện.
    Cách sử dụng:như đã nói ở trên servlet thường được dùng làm controller trong mô hình MVC pattern



    III:Vì sao cần có JSP và Servlet trong 1 ứng dụng java?

    - Về cơ bản jsp và servlet có thể thay thế nhau và làm được hầu hết các nhiệm vụ giống nhau vậy tại sao không dùng 1 thằng thôi mà lại phải dùng cả 2 thằng?


    1. Đơn giản vì Servlet không cho phép nhúng trực tiếp mã HTML/CSS/XML vào trong Class của nó. Mặc dù ta vẫn có thể làm việc đó bằng cách sử dụng phương thức println(); tuy nhiên làm như vậy rất thiếu muối và không ai muốn làm thế để đốt thời gian và công sức cả(nếu bạn có nhiều thời gian có thể thử hại não lắm đấy.Không khuyến khích vì có thể tẩu hỏa nhập ma ^_^), cho nên nó tạo ra JSP để giải quyết việc này<br/>
    2. JSP cũng có thể nhúng được mã Java thì còn cần Servlet làm gì?JSP tuy có ưu điểm là nhúng được mã Java vào trong nó nhưng khi một ứng dụng Web được mở rộng thêm thì JSP trở nên rối rắm, khó quán lí và bảo mật kém hơn - khi 1 số mã JSP có thể bị đọc bởi Client.<br/>
    3. Trên thực tế JSP xuất hiện trước Servlet nên việc Servlet sinh ra để khắc phục nhược điểm của JSP mới là ý chính. Tuy nhiên người ta cũng không khai tử JSP mà giữ lại những ưu điểm của nó cho việc phát triển ứng dụng Web 1 cách linh hoạt :D