9. Servlet kết nối các cơ sở dữ liệu

Các WebSite ngày nay không chỉ hiển thị những thông tin của các trang HTML tĩnh. Ví dụ, trong thương mại điện tử, một lĩnh vực đang thịnh hành trên thế giới, khách hàng có thể vào một trang Web bán hàng, chọn những mặt hàng cần mua, điền vào phiếu mua hàng sau đó thanh toán (bằng các phương thức trả tín phiếu, check, chuyển khoản, v.v.) thì sẽ nhận được các mặt hàng theo yêu cầu. Như vậy, các thông tin chi tiết về khách hàng phải được lưu trữ trong CSDL ở máy dịch vụ để thực hiện được các dịch vụ thương mại điện tử. Trong những kịch bản như thế, các Website phải được kết nối với các CSDL khác.

Servlet và JDBC là hai công cụ rất hiệu quả cho người lập trình ứng dụng Web kết nối Web với CSDL.

9.1 Vai trò của Servlet trong mô hình kết nối CSDL

Các chương trình ứng dụng trên mạng hiện nay đang chuyển từ mô hình Client/Server sang mô hình ba tầng, hoặc n-tầng. Trong mô hình ba tầng, Client không thực hiện truy vấn trực tiếp các CSDL mà thông qua tầng trung gian ở Server để truy vấn vào các CSDL.

Mô hình ba tầng có ưu điểm là nó tách riêng phần biểu diễn ảo (ở phía Client) ra khỏi phần logic nghiệp vụ (tầng trung gian) và dữ liệu thô ở Server. Do vậy, nó cho phép nhiều Client có thể truy cập vào cùng một dữ liệu, cùng một nghiệp vụ và nhiều loại chương trình Java thực hiện như chương trình ứng dụng độc lập, chương trình Applet hay chương trình Web. Servlet có một vị trí quan trọng trong việc truy cập vào CSDL ở tầng trung gian. Ví dụ, hãy tưởng tượng có một chương trình đặt mua hàng trên mạng. Nếu không có tầng trung gian thì chương trình này phải kết nối trực tiếp với CSDL trên máy chủ và máy chủ phải ghi lại đơn hàng, cập nhật lại các trường dữ liệu trong CSDL (trừ đi những mặt hàng đã bán theo đơn đặt mua). Chương trình của khách có thể bị ngắt nếu Server của CSDL bị thay đổi theo một cách nào đó. Hoặc có thể một ai đó can thiệp vào chương trình của khách, Server nhận được đơn đặt hàng nhưng không nhận được sự thanh toán của khách, mặc dù khách hàng đã thực hiện thanh toán theo đơn đặt hàng, v.v.

Tầng trung gian sử dụng logic nghiệp vụ để trừu tượng hoá quá trình xử lý đặt hàng. Nó nhận thông tin từ đơn đặt hàng, kiểm tra tính xác thực của thẻ tín dụng, tài khoản, v.v, và chuyển những thông tin đó cho hệ CSDL. Khi hệ CSDL thay đổi thì tầng trung gian sẽ được cập nhật mà không làm ảnh hưởng đến chương trình của khách. Ngoài ra,  tầng trung gian còn giúp ta tăng hiệu quả xử lý công việc vì nó hỗ trợ để kết nối chéo với nhiều hệ CSDL khác nhau.

9.2 Xử lý giao dịch với JDBC

Sự truyền thông giữa Client và tầng trung gian thường sử dụng HTTP (khi người sử dụng dùng Web Browser), RMI (khi người sử dụng dùng phần mềm ứng dụng hay Applet triệu gọi từ xa như đã đề cập ở chương II). Bộ điều khiển kết nối JDBC được sử dụng để quản lý sự trao đổi thông tin giữa tầng trung gian và CSDL.

JDBC là giao diện với SQL, một giao diện với hầu như tất cả các CSDL mô hình dữ liệu  quan hệ hiện đại.

Ta hãy xét tiếp chương trình đặt mua hàng trực tuyến. Khách hàng điền vào đơn đặt mua và gửi đến cho Cửa hàng (hệ thống bán hàng trực tuyến). CSDL của hệ thống phải được cập nhật và chèn thêm bản ghi thông tin về khách hàng đó. Tương tự, sau khi giao dịch mua/bán kết thúc thì một số bảng trong hệ CSDL cũng sẽ phải được cập nhật.

Những vấn đề trên được các câu lệnh của SQL thực hiện. Đối tượng của lớp Connection được sử dụng để quản lý các giao dịch với JDBC.

Ví dụ Ta hãy xây dựng một chương trình ứng dụng thời gian thực có sử dụng Servlet. Để thực hiện ví dụ này, mặc định là ta đã biết sử dụng HTML và Microsoft FrontPage để tạo lập các trang Web.

Chúng ta hãy xét bài toán như sau: Sao Mai là công ty cho bán và cho thuê ô tô. Họ bán, cho thuê các ô tô gia đình và các ô tô chở khách cho các tua du lịch. Công ty muốn thành lập một câu lạc bộ cùng với một Website: CarSaoMai.com để thực hiện các dịch vụ trực tuyến nêu trên.

Để tham gia được vào CarSaoMai.com thì bạn phải điền vào một thẻ đăng ký gia nhập câu lạc bộ và chỉ những người đã đăng ký mới được cung cấp các dịch vụ trực tuyến để mua và sử dụng ô tô. Những người chưa đăng ký thì chỉ được quyền truy cập để biết được những thông tin về Công ty và những thông tin tóm tắt về các dịch vụ mà Công ty cung cấp.

Trước tiên, ta hãy thiết kế quá trình đăng ký như sau.

  • Tạo ra trang HTML chứa mẫu đăng ký.
  • Cập nhật lại CSDL về các Servlet làm việc ở tầng trung gian khi có một người mới đăng ký.
  • Tạo ra một CSDL chính để lưu trữ thông tin về các thành viên của câu lạc bộ.
  • Tạo ra Servlet khác để cho phép tất cả các thành viên câu lạc bộ kết nối được vào Website và được phục vụ.

1. Thiết lập CSDL

Đầu tiên, ta có thể sử dụng Microsoft Access để tạo ra một CSDl nhỏ, ví dụ carsSaoMai.mdb. Để sử dụng CSDL này, ta sử dụng 32-bit ODBC (chọn trong Control Panel\Administrative Tools\Data Sources (ODBC)). Sau khi mở được hộp thoại ODBC Data Sources Administrator, hãy chọn System DSN và nhấn vào nút Add để đưa thêm CSDL mới vào nguồn dữ liệu. Nhập tên CSDL carsSaoMai vào trường Data Source Name và nhấn vào Selection để thiết lập đường dẫn tới thư mục chứa tệp carsSaoMai.mdb.

carsSaoMai.mdb có hai bảng được thiết kế như sau.

(i) Bảng Login

Tên trường Kiểu dữ liệu Các ràng buộc
LogName Text(20) Khoá nguyên thuỷ
Passwd Text(20) Không rỗng

(ii) Bảng Memebers: lưu trữ các thành viên câu lạc bộ

Tên trường Kiểu dữ liệu Các ràng buộc
LogName Text(20) Khoá tham chiếu
FName Text(30) Không rỗng
LName Text(30) Không rỗng
Age Number(2) Không rỗng
Gender Text(10) Không rỗng
Address Text(30) Không rỗng
City Text(30) Không rỗng
PIN Number(7) Không rỗng
EMail Text(30) Không rỗng
Phone Number(10) Không rỗng
Salary Number(20) Không rỗng

2. Tạo lập trang chủ và mẫu đăng ký câu lạc bộ

Ta có thể tạo ra các trang HTML cho trang chủ và các mẫu đăng ký đã được thiết kế

Lưu lại trang Web trên vào tệp carsSaoMai_HomePage.shtm. Tệp này có thêm dòng lệnh:

<servlet code = http://128.28.10.1:8080/servlet/pageValidator.class>

</servlet>

Servlet pageValidator.class cùng với một phần mã HTML sẽ tạo ra Servlet ở phía máy chủ. Lưu ý là cần phải thay đổi địa chỉ URL tới URL của Web Server của bạn.

Tệp carsSaoMai_HomePage.shtm có các điểm liên kết tới các trang HTML bao gồm:

  • SaoMai.html: trang chứa các thông tin về câu lạc bộ.
  • member.html: ghi nhận các thành viên đăng ký vào câu lạc bộ
  • getRegisteredNow.html và registrationContD.html: cho phép các thành viên mới đăng ký vào câu lạc bộ.

3. Viết các Servlet cho tầng trung gian

carsSaoMai.com  sử dụng các Servlet để nhận được các thông tin từ Client Browser, thẩm định thông tin này, tương tác với CSDL để chèn các bản ghi mới, tìm trong CSDL những thành viên đã đăng ký và thực hiện các dịch vụ mà các thành viên câu lạc bộ yêu cầu. Đó là các Servlet:

  • NewRegistry và MamberDetailEntry: ghi nhận những thành viên mới.
  • RegisteredMemeber: tìm trong CSDL những thành viên đã đăng ký và truy cập để xác định những thông tin cần thiết.

4. Dịch và thực hiện chương trình ứng dụng

Tóm lại, việc tạo lập một trang Web (diễn đàn) đáp ứng các yêu cầu trên, ta thực hiện các bước như sau:

  • Tạo ra một CSDL carsSaoMai.mdb, và để truy cập được vào nó thì phải cho biết tên và mật khẩu của người đã đăng ký tham gia Câu lạc bộ. CSDL này có hai bảng  Login và Memebers.
  • Chuyển tất cả các tệp HTML mà Website yêu cầu vào thư mục, ví dụ public_html của JavaWebServer. Đồng thời chuyển các tệp ảnh vào thư mục này. Nhớ là phải thay đổi URL cho thích hợp như đã nêu ở trên.
  • Tiếp theo, chuyển các tệp lớp đã được dịch (.class) của các chương trình Servlet để nạp vào thư mục Servlet của JavaWebServer. Ở đây cũng cần nhớ là phải thay đổi URL đã chỉ ra trong các tệp .java  trước khi dịch và chuyển chúng về thư mục \JavaWebServer2.0\servlets.
  • Khởi động Java Web Server bằng cách thực hiện httpd.exe ở thư mục Web server\bin.
  • Khi Web Server đã hành động, hãy mở trình duyệt của bạn và gõ vào

http://localhost:8080/SaoMai_homepage.shtml

  • Nếu trang Web này chưa được nạp về thì thay localhost trong URL ở trên bằng địa chỉ IP máy của bạn, ví dụ:

http://128.28.10.1:8080/SaoMai_homepage.shtml

Tương tự như trên nếu ta muốn thực hiện trên Web Server.

Các bài viết liên quan:
Tìm hiểu Servlet – Phần 3