V. Các giải pháp công nghệ
1. Ngôn ngữ lập trình
Các ngôn ngữ lập trình
Chúng ta đã quen thuộc với những khái niệm ngôn ngữ như: PHP, JAVA, ASP, PERL, PYTHON, RUBY ON RAILS…mỗi ngôn ngữ đều có những ưu và khuyết điểm riêng. Ở đây tôi xét đến 3 loại ngôn ngữ lập trình phổ biến và rất thông dụng trong giới thiết kế web hiện nay là PHP, JAVA và ASP. Bây giờ chúng ta hãy xét đến những ưu nhược điểm của chúng ra sao?
Với PHP, bạn có thể viết ra nhiều kiểu ứng dụng có mô hình tương tác khác nhau như thông qua website (HTTP Request – Response), thông qua Command Line Interface – CLI (Shell, Batch processing…), Web Service (SOAP, REST…)… Giống như các công nghệ web khác, PHP là một ngôn ngữ phía Server, có nghĩa là code của bạn sẽ được triển khai và thực thi trên Server.
Ưu điểm của PHP là một sản phẩm mã nguồn mở (Open-source) nên việc cài đặt và tùy biến PHP là miễn phí và tự do, có thể được cài đặt trên hầu hết các Web Server thông dụng hiện nay như Apache, IIS… Ngày càng có nhiều Framework và ứng dụng PHP viết bằng mô hình OOP nên lập trình viên tiếp cận và mở rộng các ứng dụng này
trở nên dễ dàng và nhanh chóng. Một số hệ cơ sở dữ liệu thông dụng mà PHP có thể làm việc là: MySQL, MS SQL, Oracle…
Java là một ngôn ngữ lập trình dạng lập trình hướng đối tượng (OOP). Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment) chạy.
Bằng cách này, Java thường chạy chậm hơn những ngôn ngữ lập trình thông dịch khác như C, Python, Perl, PHP, C#...
Java được tạo ra với tiêu chí "Viết (code) một lần, thực thi khắp nơi" ("Write Once, Run Anywhere" (WORA)). Chương trình viết bằng Java có thể chạy trên mọi nền tảng (platform) khác nhau thông qua một môi trường thực thi với điều kiện có môi trường thực thi thích hợp hỗ trợ nền tảng đó. Tuy Java miễn phí nhưng các công cụ phát triển Java và phần mềm máy chủ Java khá đắt.
Công nghệ Microsoft Active Server pages (ASP) đi cùng với Microsoft Intemet Information Server (IIS). ASP hỗ trợ nhiều ngôn ngữ kịch bản như PerlScript, JScript và VBScript. PerlScript dựa trên ngôn ngữ Perl, JScript dựa trên ngôn ngữ JavaScript, nhưng ngôn ngữ mặc định của ASP là VBScript, một ngôn ngữ kịch bản dễ học, là tập con của ngôn ngữ Visual Basic - một trong những ngôn ngữ lập trình phổ biến nhất hiện nay.
Ưu điểm nổi bật nhất của ASP là khả năng dùng thành phần COM và ADO (Activex Data Object), nhưng cũng chính khả năng này làm cho chương trình ASP phức tạp và khó viết hơn. Khi cần phát triển, bạn có thể tạo thành phần COM riêng.
Trở ngại lớn nhất của ASP là chỉ dùng trên IIS chạy trên máy chủ Win32.
Nếu để so sánh xem ngôn ngữ lập trình nào là tốt hơn, có nhiều ưu điểm hơn thì không thể so sánh được vì mỗi ngôn ngữ đều có thế mạnh riêng. Trong đề tài này tôi đã chọn ngôn ngữ lập trình JAVA và cụ thể là nghiên cứu về công nghệ J2EE (Java 2 Platform, Enterprise Edition), gồm các đặc tả, công cụ, API mở rộng J2SE để phát triển các ứng dụng qui mô xí nghiệp, chủ yếu để chạy trên máy chủ (server). Bộ phận hay được nhắc đến nhất của công nghệ này là công nghệ Servlet/JSP: sử dụng Java để làm các ứng dụng web.
2. Ngôn ngữ lập trình java a. Lý thuyết về JAVA
Hiện nay công nghệ Java được chia làm ba bộ phận:
J2SE : Gồm các đặc tả, công cụ, API của nhân Java giúp phát triển các ứng dụng trên desktop và định nghĩa các phần thuộc nhân của Java.
J2EE: Gồm các đặc tả, công cụ, API mở rộng J2SE để phát triển các ứng dụng qui mô xí nghiệp, chủ yếu để chạy trên máy chủ (server). Bộ phận hay được nhắc đến nhất của công nghệ này là công nghệ Servlet/JSP: sử dụng Java để làm các ứng dụng web.
J2ME: Gồm các đặc tả, công cụ, API mở rộng để phát triển các ứng dụng Java chạy trên điện thoại di động, thẻ thông minh, thiết bị điện tử cầm tay, robo và những ứng dụng điện tử khác.
Trong đề tài này tôi nghiên cứu về J2EE, Servlet/JSP để làm ứng dụng web.
Tổng quan về J2EE
J2EE (Java 2 Enterprise Edition) có thể xem là các đặc tả hướng dẫn các qui tắc để tiêu chuẩn hóa việc coding trong quá trình phát triển phần mềm. Các đặc tả của J2EE bao gồm các qui tắc hay các tiêu chuẩn để:
− Thiết kế các ứng dụng doanh nghiệp
− Phân phối các qui tắc cho mọi người được triệu gọi trong quá trình phát triển phần mềm (Project/product)
− Đóng gói các tập tin cho các khách hàng
− Tiêu chuẩn hóa các công nghệ có thể sử dụng trong J2EE
− Tiêu chuẩn hoá các tương tác giữa các công nghệ khác nhau.
− Cung cấp một tiêu chuẩn cho các ứng dụng server của java..
Hệ nền J2EE cung cấp một mô hình ứng dụng theo kiểu đa tầng, tái sử dụng các thành phần, bảo mật thống nhất, linh hoạt trong việc kiểm soát các giao dịch và các dịch vụ web được hỗ trợ thông qua trao đổi dữ liệu tích hợp trên Extensible Markup Language (XML) – theo các tiêu chuẩn mở và các giao thức.
Các ứng dụng phân tán đa tầng
doanh nghiệp. Về mặt logic ứng dụng được chia theo các thành phần theo chức năng, và các thành phần ứng dụng khác nhau tạo nên một ứng dụng J2EE được cài đặt trên các máy khác nhau tùy thuộc vào các tầng trong môi trường phân tầng của J2EE nơi mà các thành phần ứng dụng thuộc về.
Hình 1.1. Trình bày 2 ứng dụng phân tầng J2EE được chia thành các lớp được mô tả trong danh sách sau đây.
− Các thành phần tầng khách hành chạy trên máy khách hàng
− Các thành phần tầng web chạy trên máy chủ J2EE
− Các thành phần nghiệp vụ kinh doanh chạy trên máy chủ J2EE
− Phần mềm hệ thống thông tin doanh nghiệp (EIS) chạy trên EIS Server
Mặc dù 1 ứng dụng J2EE có thể bao gồm 3 hay 4 tầng như trong hình 1.1 nhưng các ứng dụng phân tầng J2EE thường được coi như là 3 tầng bởi vì chúng được phân chia theo địa điểm : máy khách hàng, máy chủ J2EE và database. Ứng dụng 3 tầng này chạy bằng cách mở rộng tiêu chuẩn mô hình 2 tầng máy khách hàng và máy chủ bằng cách đặt 1 máy chủ ứng dụng đa luồng giữa máy khách hàng và các lưu trữ phía sau.
Các thành phần của J2EE
Ứng dụng J2EE được tạo thành từ các thành phần. Một thành phần J2EE là một
đơn vị chức năng phần mềm khép kín được lắp ghép vào một ứng dụng J2EE, nó có liên quan đến các lớp, các tập tin và nó giao tiếp với các thành phần khác. Các J2EE đặc tả định nghĩa các thành phần J2EE sau đây:
− Ứng dụng khách hàng và các applet là những thành phần chạy trên máy khách.
− Thành phần công nghệ Java Servlet và JavaServer Pages ™ (JSP ™) là các thành phần web chạy trên máy chủ.
− Enterprise JavaBeans ™ (EJB ™) là thành phần nghiệp vụ kinh doanh chạy trên máy chủ.
J2EE được viết bằng ngôn ngữ lập trình Java và được biên dịch trong cùng một cách như bất kỳ chương trình cùng ngôn ngữ. Sự khác biệt giữa J2EE và các lớp Java
“tiêu chuẩn” là các thành phần J2EE lắp ráp thành một ứng dụng J2EE, được xác minh và tuân thủ với các đặc tả J2EE, và được triển khai tại nơi mà chúng chạy và được quản lý bởi máy chủ J2EE.
b. Tổng quan về JSP / Servlet
Servlet
Servlet là đoạn chương trình java thực thi trên Web Server hỗ trợ người lập trình Java xây dựng trang web động mà không cần học ngôn ngữ lập trình web mới Servlets nhận request – yêu cầu từ client, sau đó thực hiện các yêu cầu xử lý để gửi response – phản hồi đến người dùng sử dụng HTTP Servlet được load sẵn ở Web Server duy nhất lần đầu tiên khi ứng dụng được deploy và đáp ứng tức thời yêu cầu của người dùng thông qua Web Container. Servlet được server hỗ trợ cơ chế multithread giúp giảm tài nguyên và quá tải trong việc xử lý của server hay container
Cơ chế hoạt động
Hình 1.2. Cơ chế hoạt động của servlet.
− Khi có request từ client gửi đến Server hay Web Container
− Container sẽ lựa chọn một instance Servlet tương ứng để đáp ứng request đó (người dùng sẽ không bao giờ biết instance nào được lựa chọn, nó lựa chọn khi nào, servlet xử lý khi nào)
− Servlet lựa chọn sẽ thực hiện xử lý và kết nối DB nếu cần
− Sau khi servlet thực hiện xong, sẽ gửi kết quả ra container để gửi response về cho người dùng
− Browser đón nhận kết quả và trình bày ra màn hình dữ liệu Chu kỳ tồn tại của servlet trong server hay container
− Khi một ứng dụng chưa được deploy vào trong server thì servlet chưa được khởi tạo
− Khi ứng dụng được deploy vào server thì container sẽ thực hiện khởi tạo instance cho servlet, trong lúc khởi tạo kích hoạt hàm init.
− Khi có một request đến servlet của người dùng, container đón nhận request và chọn instance bean bất kỳ tương ứng với yêu cầu để đáp ứng.
− Sau khi chọn được bean, container sẽ kích hoạt hàm service tương ứng
− Khi servlet được cập nhật mới hay server bị crash hay undeploy ứng dụng ra khỏi server – container, thì hàm destroy của servlet được kích hoạt.
Web Server
Servlet Request
Browser
<HTTP>
Client
Response
Database
Uninstanti ated
Instantiati on
Initializati on
Meet request
failure
failure Unload Destroy
unavailable
Meet make reques t
Hình 1.3. Chu kỳ tồn tại của servlet.
Mô hình Servlet Request & Response.
Request là thông tin được gửi từ client tới 1 server. Response là thông tin được gửi đến client tới 1 server. Nhiệm vụ của Servlet:
− Nhận client request (hầu hết ở dạng http request)
− Trích xuất 1 số thông tin từ request.
− Xử lý nghiệp vụ (truy cập DB, gọi EJBs…)
− Tạo và gửi trả response cho client (hầu hết ở dạng HTTP response) hoặc forward request cho servlet khác/ cho trang JSP.
Hình 1.4. Mô hình Servlet Request & Response.
HTTP Request
Browser
Respone
Web Server
Servlet
Servlet Container
Request
Respone
JSP (Java Server Pages) JSP viết tắt của Java Server Pages
− Đây là ngôn ngữ scripting được dùng ở server để hỗ trợ ứng dụng trong việc trình bày trang web động – cập nhật dữ liệu
− JSP tích hợp bao gồm HTML, XML, Java Code, và kể cả Servlet
− Nó tạo thuận lợi cho người dùng trong việc xây dựng giao diện – khắc phục nhược điểm của servlet về giao diện.
− Ngoài ra, nó cho người dùng mở rộng khả năng sử dụng JSP qua việc định nghĩa các tag mới như XML – khắc phục nhược điểm của HTML
− Đặc biệt cho phép người dùng sử dụng nhúng trưc tiếp code Java vào trong JSP thông qua Declaration – khai báo biến và hàm, Scriptlets – chứa code trực tiếp của Java và Expression – tính toán biểu thức và in kết quả ra màn hình.
− Bản chất của JSP là Servlet, do vậy các thành phần của Servlet sẽ có tồn tại hết trên JSP.
− Ngoài ra, JSP không cần phải biên dịch mà nó được biên dịch khi có request lần đầu tiên yêu cầu đến server.
Để chạy được một trang JSP thì tất cả các code của JSP phải được biên dịch sang Servlet sau đó tùy vào nội dung mà Servlet sẽ cho ra trang HTML với nội dung có được từ xử lý của các đoạn code JSP để trả lời yêu cầu của client.
Chu kỳ sống của JSP
Hình 1.5. Chu kỳ sống của JSP.
Khi có một yêu cầu từ client đến server, container xác định trang jsp được yêu cầu
SERVER
Client Databas
JSP File
Trang JSP được đưa qua JSP Engine để xử lý. JSP Engine thực hiện các bước sau
− Đọc cấu trúc file của JSP File từ trên xuống dưới, từ trái qua phải để chuyên đổi (Parsing) sang Java code tương ứng
− Phát sinh Servlet từ nội dung parsing ở bước trên để cấu tạo thành servlet
− Thực hiện biên dịch code Servlet
− Sau khi biên dịch thành công thì quá trình hoạt động sẽ thực hiện đúng theo chu kỳ sống của Servlet như đã nêu trong các phần trên.