Một endpoint interface (gọi tắt là một enpoint) gồm có nhiều ports, mỗi port quy
định một cách liên lạc với web service khác nhau ứng với mỗi giao thức bên dưới
khác nhau. Sựkết hợp của web service với một giao thức mạng nhưthế được gọi là
một binding, nhưtrong hình 8.4 chúng ta thấy có 3 binding khác nhau. Port 1 sử
dụng SOAP/HTTP binding, Port 2 sửdụng SOAP/HTTPS binding, Port 3 sửdụng
các dạng binding khác. Nhưvậy ứng với web service trên, ta có đến 3 phương tiện
khác nhau đểtriệu gọi các hàm.
Các hình thức binding thông dụng nhất hiện nay vẫn là SOAP/HTTP POST và
SOAP/HTTPS (hỗtrợbảo mật thông qua SSL).
Việc phát sinh file WSDL sẽ được tự động thực hiện bởi các bộcông cụ(như
Visual Studio .NET) do đó chúng ta không nhất thiết phải hiểu rõ cấu trúc file
WSDL. Tuy nhiên, nếu hiểu cấu trúc file WSDL sẽcung cấp cho chúng ta thêm
nhiều tùy biến cũng nhưkhảnăng sửa lỗi (debug) tốt hơ
234 trang |
Chia sẻ: haianh_nguyen | Lượt xem: 1351 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Nghiên cứu java mobile và xây dựng ứng dụng minh họa, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
g có node Header thì node Body phải là node con
đầu tiên của SOAP Envelope.
Trong mục Body có thể có nhiều node con, được gọi chung là mẫu tin Body.
Phần Body chứa các thông tin về lời gọi hàm, ví dụ như tên hàm cần gọi, các tham
số đầu vào, giá trị trả về … để phục vụ cho việc gọi hàm từ xa.
Đây là một ví dụ hoàn chỉnh và đơn giản về việc sử dụng SOAP để gọi hàm
GetAccount(int accNumber) với tham số truyền vào accNumber=1234. Gói tin
SOAP được đặt trong gói tin HTTP Request có dạng như sau:
POST /dummy/service1.asmx HTTP/1.1
Host: 192.168.0.80
Content-Type: text/xml; charset=utf-8
Content-Length: 215
SOAPAction: ""
<soap:Envelope xmlns:xsi=""
xmlns:xsd=""
xmlns:soap="">
1234
159
Java Mobile
Phần trên là nội dung gói tin HTTP Request dạng POST, trong gói tin này chứa
lời gọi đến hàm GetAccount(int accNumber) dưới dạng một gói tin SOAP.
Việc hiểu cấu trúc SOAP chủ yếu phục vụ cho việc debug ứng dụng hoặc xây
dựng các ứng dụng cần sự can thiệp ở mức sâu đến các protocol bên dưới. Đối với
các chương trình thông thường hiếm khi chúng ta phải thao tác với gói tin SOAP.
Đây là nội dung gói tin SOAP phản hồi cho lời gọi hàm trên, chỉ ra kết quả lời
gọi hàm là 5250.00
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: 247
<soap:Envelope xmlns:xsi=""
xmlns:xsd=""
xmlns:soap="">
5250.00
SOAP Fault:
160
Java Mobile
Như đã đề cập, một trong những vấn đề đặt ra trong môi trường ứng dụng phân tán
là khả năng xảy ra lỗi cao; do đó khái niệm SOAP Fault được đề ra để vận chuyển
các thông báo lỗi trong quá trình hoạt động.
HTTP/1.0 500 Internal Server Error
Content-Length: 460
Content-Type: text/xml; charset="utf-8"
<soap:Envelope
xmlns:soap="”>
123XYZ
Server Error
Your account is overdrawn
1234
Soap Fault có những phần con như faultcode, faultstring, faultactor, faultdetail
để cung cấp những thông tin chi tiết khi có lỗi phát sinh. Trong những môi trường
lập trình cao cấp như Java, .NET, khi soap fault phát sinh thì một ngoại lệ
(Exception) cũng được phát sinh để báo cho lập trình viên có xử lý tương ứng.
161
Java Mobile
8.3.2. WSDL (Web Service Definition Language)
Khi chúng ta đã xây dựng hoàn thành web service cần phải cung cấp tài liệu mô
tả để các nhà phát triển client có thể sử dụng được web service trên. Tài liệu mô tả
web service cần mô tả được vị trí web service, các hàm nó cung cấp, tham số kèm
theo…
Tài liệu WSDL là một tài liệu thỏa mãn các nhu cầu trên. WSDL (Web Service
Definition Language) là một ngôn ngữ dựa trên cú pháp XML dùng để định nghĩa
một web service. Nói cách khác, một file WSDL như một người trung gian đứng
giữa web service và ứng dụng web service client.
Trong tài liệu WSDL, chúng ta sẽ định nghĩa các phương thức được web service
hỗ trợ, các kiểu dữ liệu được xử dụng trong các phương thức cùng các thông điệp
được trao đổi giữa client và server ứng với mỗi phương thức. Chúng ta chỉ phải
định nghĩa các kiểu dữ liệu phức tạp như mảng, các lớp được khai báo thêm trong
chương trình, mảng các lớp … còn các kiểu dữ liệu cơ bản như int, string, float …
đã được hỗ trợ sẵn. Sau đó, chúng ta gộp chung các định nghĩa này kết hợp với các
giao thức mạng bên dưới để hình thành một end-point (tạm dịch là một đầu cuối).
Hình 8.4 Web Service Endpoint
162
Java Mobile
Một endpoint interface (gọi tắt là một enpoint) gồm có nhiều ports, mỗi port quy
định một cách liên lạc với web service khác nhau ứng với mỗi giao thức bên dưới
khác nhau. Sự kết hợp của web service với một giao thức mạng như thế được gọi là
một binding, như trong hình 8.4 chúng ta thấy có 3 binding khác nhau. Port 1 sử
dụng SOAP/HTTP binding, Port 2 sử dụng SOAP/HTTPS binding, Port 3 sử dụng
các dạng binding khác. Như vậy ứng với web service trên, ta có đến 3 phương tiện
khác nhau để triệu gọi các hàm.
Các hình thức binding thông dụng nhất hiện nay vẫn là SOAP/HTTP POST và
SOAP/HTTPS (hỗ trợ bảo mật thông qua SSL).
Việc phát sinh file WSDL sẽ được tự động thực hiện bởi các bộ công cụ (như
Visual Studio .NET) do đó chúng ta không nhất thiết phải hiểu rõ cấu trúc file
WSDL. Tuy nhiên, nếu hiểu cấu trúc file WSDL sẽ cung cấp cho chúng ta thêm
nhiều tùy biến cũng như khả năng sửa lỗi (debug) tốt hơn.
Cấu trúc file WSDL:
Một tài liệu WSDL thực chất chỉ là một danh sách các định nghĩa. Trong một file
WSDL, phần tử gốc được đặt tên là "definitions". Phần tử này chứa năm phần tử
con chính để định nghĩa web service. Thứ tự xuất hiện của các phần tử con này:
• Phần tử "types": định nghĩa các kiểu dữ liệu dùng để trao đổi giữa client và
server (chỉ định nghĩa các kiểu dữ liệu phức tạp như structure, class…).
• Phần tử "message": định nghĩa các thông điệp được trao đổi.
• Phần tử "portType": định nghĩa một tập các chức năng web service hỗ trợ và
thông điệp tương ứng đối với mỗi chức năng đó.
• Phần tử "binding": Sau khi đã định nghĩa các port, ta cần chỉ rõ ràng buộc
giữa các ports này và các giao thức tầng dưới. Phần tử binding sẽ đảm nhiệm
chức năng này (sẽ được đề cập kỹ hơn ở phần sau).
• Phần tử "service": Có tác dụng gom các ports đã định nghĩa thành từng
nhóm.
163
Java Mobile
Để hiểu rõ hơn về file WSDL chúng ta sẽ cùng tìm hiểu một ví dụ chính thức của
hãng Microsoft (ebook Developing XML Web Service Using Microsoft Studio
.NET):
public class Acct
{
public string description;
public string number;
public string type;
public decimal balance;
[XmlAttribute("status")]
/*chỉ rõ status là một attr chứ không phải node con.*/
public string status;
}
public class TheBank
{
[WebMethod]
/*
Phần [WebMethod] báo hiệu đây là hàm được export bởi web service để cho
phép truy cập từ xa. Điều này sẽ được trình bày rõ hơn ở phần xây dựng web
service bằng Visual Studio .NET
*/
public Acct GetAccount(string acctNumber)
{
Acct a = new Acct();
a.description = "Adam's savings acct";
a.balance=10000.0M;
a.number="1234-XX";
a.status="active";
a.type="SV";
164
Java Mobile
return a;
}
}
Đây là một đoạn code khá đơn giản, ta định nghĩa một lớp Acct và cung cấp một
phương thức để lấy về một Account, tham số truyền vào có kiểu string.
Chúng ta sẽ xem xét qua cấu trúc các phần tử vừa nêu đối với web service trên.
8.3.2.1. Phấn tử types:
Các quy tắc định nghĩa trong phần tử types đều tuân theo chuẩn XML
Schema Definition Language (XSD). Tham số acctNumber được định nghĩa như
sau:
...
...
<s:element minOccurs="1" maxOccurs="1"
name="acctNumber" nillable="true"
type="s:string" />
...
Phần định nghĩa lớp Acct (kết quả trả về của hàm GetAccount) sẽ phức tạp hơn:
<s:element minOccurs="1" maxOccurs="1"
name="description" type="s:string" />
<s:element minOccurs="1" maxOccurs="1"
165
Java Mobile
name="number" type="s:string" />
<s:element minOccurs="1" maxOccurs="1"
name="type" type="s:string" />
<s:element minOccurs="1" maxOccurs="1"
name="balance" type="s:decimal" />
Dựa vào định nghĩa trên, một đối tượng thuộc lớp Acct có thể được thể hiện như
sau:
Adam's savings acct
1234-XX
SV
10000
Sau đó chúng ta phải định nghĩa cấu trúc các thông điệp được trao đổi trong
quá trình gọi hàm và nhận kết quả. Ta tuân theo một quy tắc: cấu trúc gói tin request
(lời gọi hàm) sẽ có tên trùng với tên hàm, cấu trúc gói tin response sẽ có tên là tên
hàm cộng với Response ở cuối.
<s:element minOccurs="1" maxOccurs="1"
name="acctNumber" nillable="true"
166
Java Mobile
type="s:string" />
<s:element minOccurs="1" maxOccurs="1"
name="account" type="s0:Acct" />
Trên đây là toàn bộ nội dung phần types.
8.3.2.2. Phần tử message:
Bên cạnh việc định nghĩa các kiểu dữ liệu được truyền giữa client và server
ta cần phải định nghĩa các thông điệp được truyền đi và hồi đáp. Bởi và các thông
điệp không phụ thuộc vào các giao thức tầng dưới nên các thông điệp có thể được
định nghĩa dưới dạng HTTP-GET/POST, SOAP hay bất kỳ một protocol nào hỗ trợ
Web Service.
Chúng ta có thể đặt tên bất kỳ cho thông điệp vì web service không đưa ra
một ràng buộc cũng như quy tắc đặt tên nào cả. Các phần tử message có thể chứa
nhiều phần tử con "part" (cũng có khi không chứa phần tử con nào). Một phần tử
"part" tượng trưng cho một tham số được truyền trong hàm. Một phần tử part phải
có một tên và kiểu dữ liệu tương ứng đã được định nghĩa.
Đối với ví dụ trên thì phần tử message có dạng như sau:
167
Java Mobile
Ở đây ta gập lại cấu trúc GetAccout và GetAccountResponse đã định nghĩa ở
phần types. Theo như định nghĩa trên, thông điệp đầu vào GetAccountIn nhận một
tham số có kiểu GetAccount và thông điệp đầu ra GetAccountOut trả về một kết
quả có kiểu GetAccountResponse; cả hai kiểu này đã được định nghĩa ở phần tử
types trước đó. Các message được định nghĩa này sẽ được dùng ở phần sau.
8.3.2.3. Phần tử portType:
Ta có thể nói một cách đơn giản như sau: phần tử “types” định nghĩa các
kiểu dữ liệu, phần tử “message” định nghĩa tất cả các thông điệp (hay cũng có thể
gọi là gói tin) vào/ra nhưng lại chưa thể hiện được “thông điệp nào là của phương
thức nào”, vai trò này do portType đảm nhận.
Chúng ta có thể nhận thấy, các từ khóa input và output được dùng để chỉ rõ gói
tin request và gói tin response.
Phần định nghĩa portType trên cũng khá đơn giản, đối với hàm GetAccount ( ) sẽ có
hai thông điệp:
• Thông điệp input: Lời gọi hàm từ client gửi lên server, có tên
GetAccountIn. Nếu đọc ngược lên phần tử message, ta sẽ thấy thông điệp
168
Java Mobile
GetAccountIn sẽ có kiểu GetAccount, và kiểu dữ liệu GetAccount được định
nghĩa trong phần tử types.
• Thông điệp output: Kết quả trả về được gửi từ server đến client, có tên
GetAccountOut. Tương tự, phần tử message đã cho chúng ta biết thông điệp
GetAccountOut sẽ có kiểu GetAccountResponse và kiểu này đã được định
nghĩa trong phần types.
8.3.2.4. Phần tử binding
Các phần tử chúng ta đã xem xét qua có trách nhiệm định nghĩa web service
một cách trừu tượng: chúng cho biết các phương thức được web service hỗ trợ, các
thông tin kèm theo như tham số truyền vào, kết quả trả về của mỗi phương thức.
Tuy nhiên, với những thông tin trên chúng ta chưa xác định được sẽ phải dùng công
cụ nào để truy xuất đến web service này: ta sẽ dùng SOAP kết hợp với HTTP hay
SOAP/HTTPS hay công cụ nào khác? Phần tử binding sẽ định nghĩa cách thức truy
cập web service thông qua các protocols bên dưới.
Mỗi phần tử binding sẽ mô tả cách thức liên kết một portType vào một
protocol nhất định. Nếu web service của chúng ta hỗ trợ nhiêu protocol thì phải tạo
cho mỗi protocol một phần tử binding.
<soap:binding transport = ""
style="document" />
<soap:operation soapAction =
“” style="document" />
169
Java Mobile
Đoạn ví dụ trên cho biết web service sử dụng SOAP là protocol trao đổi
thông tin và gói tin soap sẽ được vận chuyển bằng HTTP, chúng ta có thể sử dụng
nhiều công cụ khác để truy xuất đến các hàm của web service nhưng SOAP hiện
nay là thông dụng nhất. Đoạn định nghĩa trên còn chỉ rõ “document/encoding style”
được sử dụng là dạng document/literal (còn có một dạng khác khá phổ biến là
rpc/encoded; hiện tại j2me chỉ hỗ trợ web service dạng document/literal).
8.3.2.5. Phần tử service:
Phần cuối cùng của file WSDL chứa định nghĩa các thông số vật lý cụ thể
dùng để truy xuất đến web service.
<soap:address location =
""/>
Giá trị location trong phần tử port chỉ rõ vị trí đặt web service. Phần tử
“binding” cho biết cách thức ánh xạ các phương thức trong phần tử “portType”
thành các gói tin SOAP (hoặc gói tin của các protocols khác) nhưng không cho biết
làm thế nào để tạo được một đối tượng portType. Đấy là nhiệm vụ của phần tử port,
phần tử port sẽ ánh xạ một phần tử portType sang một địa chỉ URI cụ thể. Node
170
Java Mobile
service sẽ gom nhóm các port liên quan đến nhau. Nếu web service có thể được truy
xuất đến bởi nhiều protocol thì sẽ có nhiều phần tử port được định nghĩa.
Trên đây là toàn bộ nội dung của một file WSDL, có khá nhiều điểm phức
tạp. Tuy nhiên, với vai trò là người sử dụng web service cũng như người xây dựng
web service đơn thuần chúng ta không cần nắm rõ cấu trúc file này vì đã có các
công cụ hỗ trợ. Cả J2ME và Visual .NET đều hỗ trợ công cụ đọc file WSDL để phát
sinh các lớp tương ứng phục vụ cho việc truy xuất hàm từ xa, mọi công việc phức
tạp bên dưới đã được giấu đi với nhà phát triển ứng dụng.
171
Java Mobile
Chương 9: Ứng dụng đăng ký học phần
9.1 Đặc tả chương trình:
9.1.1 Tổng quan:
Chương trình hỗ trợ các chức năng đăng ký học phần, xem thời khoá biểu,
xem điểm thi… chạy trên môi trường điện thoại di động. Sau khi cài đặt chương
trình lên điện thoại và đăng ký dịch vụ truy cập Internet từ điện thoại, người dùng
có thể sử dụng hầu hết các tiện ích tương tự hệ thống SMS mà không cần có máy
tính kết nối Internet như hiện nay. Ngoài J2ME, chương trình còn sử dụng công
nghệ WebService trong kết nối mạng. Vấn đề bảo mật trong chương trình tương đối
không cần thiết, chỉ sử dụng trong quá trình gửi password khi đăng nhập nhằm
tránh việc đánh cắp password.
Chương trình được thực hiện với mục tiêu mô phỏng lập trình trên thiết bị di
động bằng J2ME nên chỉ sử dụng cơ sở dữ liệu tự xây dựng. Việc ứng dụng thực tế
trên cơ sở dữ liệu chính của hệ thống SMS là hướng mở rộng trong tương lai của
chương trình.
9.1.2 Các chức năng chính:
Khi người dùng khởi động ứng dụng client, chương trình yêu cầu người dùng
đăng nhập với account, password của hệ thống SMS.
Nếu đăng nhập không hợp lệ người dùng phải nhập lại account/password để
đăng nhập lại. Nếu đăng nhập hợp lệ, người dùng có thể truy cập hệ thống và sử
dụng các chức năng sau của chương trình.
9.1.2.1 Xem thời khoá biểu:
Người dùng nhập tên và số thứ tự lớp (vd:Lớp TH2001 STT:1) để xem
thời khoá biểu của học kỳ hiện tại của lớp tương ứng.
172
Java Mobile
9.1.2.2 Đăng ký học phần:
Trong thời gian được đăng ký, người dùng có thể đăng ký các học phần
lý thuyết cũng như học phần thực hành mà trường mở trong học kỳ này.
9.1.2.3 Xem phiếu đăng ký:
Xem lại các học phần lý thuyết và thực hành mà người dùng đã thực hiện
đăng ký.
9.1.2.4 Xem điểm thi:
Xem kết quả học tập của sinh viên .
9.1.2.5 Xem thông báo:
Xem thông báo của giáo vụ khoa.
173
Java Mobile
9.2 Kiến trúc chương trình:
9.2.1 Mô hình kết nối:
Store Procedures
GPRS
HTTP request/ response
Gateway
Web Server
.NETInternet
Client
J2ME /
JSR172
DB Server
SQL Server
Hình 9.1 Kiến trúc chương trình ứng dụng
Ứng dụng MIDlet chạy trên điện thoại di động đóng vai trò 1 client. Client
này sau khi đăng ký sử dụng dịch vụ internet cho điện thoại sẽ có khả năng kết nối
đến server.
Client được viết bằng J2ME đóng gói thành DKHP.jar và DKHP.jad. Server
là chương trình viết bằng .NET chạy trên HTTP server, không có giao diện. Server
sẽ trao đổi thông tin với Database server thông qua các Store procedure. Cơ sở dữ
liệu xây dựng trên SQL Server.
Mô hình hoạt động:
174
Java Mobile
• Điện thoại sẽ chủ động kết nối và gửi gói tin đến web server. Gói
tin sẽ được gửi dưới dạng sóng GPRS đến trạm điện thoại, trách
nhiệm của nhà cung cấp điện thoại sẽ phải chuyển tín hiệu từ dạng
sóng GPRS sang dạng tín hiệu truyền trong đường truyền hữu
tuyến internet.
• Lúc này nhà cung cấp dịch vụ di động sẽ hoạt động như một
gateway, làm trung gian liên lạc cho thiết bị di động và web server.
• Gói tin được điện thoại di động gửi đến web server là những gói tin
HTTP request và ngược lại web server sẽ hồi đáp bằng những gói
tin HTTP response. Các gói tin HTTP request và HTTP response
này sẽ chứa bên trong các thông điệp SOAP request và SOAP
response tương ứng. Các gói tin SOAP chính là trung tâm của kỹ
thuật web service, các thông điệp SOAP này sẽ chứa các lời gọi
hàm, tham số truyền đi, các tham số trả về… tạo thành mô hình
truy xuất hàm từ xa RPC (Remote Procedure Call).
• Khi web server nhận được yêu cầu xử lý từ điện thoại (thể hiện qua
các lời gọi hàm) sẽ truy xuất và giao tiếp với SQL Server qua các
store procedure để thực hiện các xử lý nghiệp vụ của chương trình.
Thông tin sau khi được sử lý sẽ được gửi trả cho client thông qua
các HTTP response.
• Các gói tin HTTP response này sẽ đến nhà cung cấp dịch vụ di
động, chuyển thành dạng tín hiệu GPRS và về đến client.
Trên đây là mô hình khái quát hoạt động của ứng dụng trong bối cảnh mạng
điện thoại di động. Yêu cầu duy nhất của thiết bị phần cứng là điện thoại phải hỗ trợ
GPRS và thư viện JSR 172. Thư viện JSR 172 có chức năng tạo các thông điệp
SOAP và phân tích nội dung các thông điệp này, nếu không có thư viện này chúng
ta không thể tạo các lời gọi hàm cũng như lấy các kết quả trả về từ hồi đáp của
server.
175
Java Mobile
9.2.2 Mô hình bảo mật (mã hoá password):
Sử dụng thuật toán DES, dùng khoá đối xứng để mã hoá password trong chương
trình.
Same Private Key
Encrypted
Session
Key
Same
Session
Key
Same
Session
Key
Encrypted Data
Hình 9.2 Mô hình mã hoá password
176
Java Mobile
9.3 Phân tích - thiết kế:
9.3.1 Mô hình use case:
9.3.1.1 Lược đồ chính:
Hình 9.3 Lược đồ use case
9.3.1.2 Danh sách các use case:
STT Use case Ý nghĩa
1 Dang nhap Đăng nhập hệ thống
2 Dang ky ly thuyet Đăng ký các học phần lý thuyết
177
Java Mobile
3 Dang ky thuc hanh Đăng ký các học phần thực hành
4 Xem phieu dang ky Xem phiếu đăng ký học phần
5 Xem ket qua hoc tap Xem kết quả học tập của sinh viên
6 Xem thoi khoa bieu Xem thời khoá biểu của lớp học
7 Xem thong bao Xem thông báo của giáo vụ khoa
Bảng 9.1 Danh sách các Use Case
9.3.2 Đặc tả một số use case chính:
9.3.2.1 Đăng nhập:
Mô tả: Hỗ trợ người dùng đăng nhập vào hệ thống.
Tác nhân kích hoạt: người dùng.
Luồng sự kiện chính:
o Chương trình client yêu cầu người dùng nhập account (MSSV),
password.
o Người dùng nhập thông tin theo yêu cầu.
o Client gửi yêu cầu đến server.
o Server phát sinh một số ngẫu nhiên (8 bytes), sau đó mã hoá bằng mật
mã (khoá đối xứng mà server và client đã chọn từ trước) bằng thuật
toán DES thành session key và gửi về cho client.
o Client dùng khoá bí mật giải mã session key này để tạo lại số ngẫu
nhiên tương ứng mà server đã tạo. Sau đó, client dùng số ngẫu nhiên
vừa tìm được để mã hoá password gửi kèm account đến server.
o Server nhận hai giá trị này từ client, truy cập cơ sở dữ liệu để lấy
password của account tương ứng. Sau đó, dùng session key mã hoá
password trong cơ sở dữ liệu và so sánh kết quả với password đã được
mã hoá nhận từ client. Nếu hợp lệ, trả về client giá trị “true”, nếu
không, trả về “false”.
o Client nhận kết quả từ server.
Điều kiện sau: tuỳ theo kết quả trả về từ server,
178
Java Mobile
o nếu là “false”, thông báo đăng nhập không hợp lệ, người dùng phải
đăng nhập lại để sử dụng chương trình.
o nếu là “true”, người dùng đăng nhập hợp lệ, hiển thị menu chức năng
chương trình cho người dùng sử dụng.
9.3.2.2 Đăng ký lý thuyết:
Mô tả: Cho phép người dùng đăng ký các học phần lý thuyết có mở trong
học kỳ này.
Tác nhân kích hoạt: ngừơi dùng
Luồng sự kiện chính:
o Người dùng chọn chức năng đăng ký lý thuyết.
o Client gửi yêu cầu đến cho server.
o Server lấy danh sách tất cả các học phần có mở trong học kỳ này, có
đánh dấu các học phần người dùng đã đăng ký trước đó, trả về cho
client.
o Client hiển thị danh sách lên cho người dùng, người dùng chọn các
môn muốn đăng ký hoặc hiệu chỉnh lại đăng ký cũ.
o Người dùng nhấn nút đăng ký, client lấy danh sách các môn mới được
đăng ký và các môn vừa được người dùng gỡ bỏ gửi cho server.
o Server truy cập cơ sở dữ liệu, xoá các đăng ký thực hành đã đăng ký
trong học kỳ này. Sau đó xoá các đăng ký lý thuyết cũ đã được gỡ bỏ
và ghi các đăng ký lý thuyết mới.
Luồng sự kiện phụ: Sau khi hết use case đăng ký lý thuyết, use case xem
phiếu đăng ký lý thuyết sẽ được gọi.
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống.
179
Java Mobile
9.3.2.3 Đăng ký thực hành:
Mô tả: Cho phép người dùng đăng ký các học phần thực hành trong học kỳ
này
Tác nhân kích hoạt: Người dùng.
Luồng sự kiện chính:
o Người dùng chọn chức năng đăng ký thực hành.
o Client gửi yêu cầu lên server.
o Server lấy từ cơ sở dữ liệu tất cả các học phần thực hành có mở tương
ứng với các học phần lý thuyết mà người dùng đã đăng ký. Các học
phần thực hành đã được người dùng đăng ký trước được đánh dấu
riêng
o Client nhận thông tin từ server, hiển thị danh sách các học phần thực
hành để người dùng đăng ký.
o Sau khi người dùng nhấn nút đăng ký, client sẽ lấy danh sách các lớp
người dùng mới đăng ký và danh sách các lớp người dùng bỏ đăng ký
gửi lên server.
o Server truy cập cơ sở dữ liệu, thực hiện đăng ký và huỷ đăng ký theo
yêu cầu của client.
Luồng sự kiện phụ: Sau khi hết use case đăng ký lý thuyết, use case xem
phiếu đăng ký lý thuyết sẽ được gọi.
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống.
9.3.2.4 Xem phiếu đăng ký:
Mô tả: Cho phép người dùng xem lại danh sách các học phần lý thuyết hay
thực hành mà người dùng đã đăng ký trong học kỳ này.
Tác nhân kích hoạt: người dùng, hệ thống.
Luồng sự kiện chính:
180
Java Mobile
o Người dùng chọn một trong hai chức năng xem phiếu đăng ký học
phần lý thuyết hay phiếu đăng ký học phần thực hành.
o Client gửi yêu cầu lên server.
o Server truy cập cơ sở dữ liệu, lấy danh sách các học phần lý thuyết
hay thực hành theo yêu cầu client mà người dùng đã đăng ký thành
công, trả về cho client.
o Client hiển thị kết quả cho người dùng.
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống.
9.3.2.5 Xem kết quả học tập:
Mô tả: Cho phép người dùng xem kết quả các học phần người dùng có học
và đã có điểm trong một học kỳ cụ thể.
Tác nhân kích hoạt: Người dùng.
Luồng sự kiện chính:
o Người dùng chọn chức năng xem kết quả học tập.
o Client yêu cầu người dùng chọn học kỳ, năm học muốn xem điểm thi.
o Người dùng nhập thông tin yêu cầu, nhấn nút xem điểm. Client gửi
yêu cầu đến server.
o Server truy cập cơ sở dữ liệu, lấy danh sách điểm thi các môn học
thoả yêu cầu (các học phần trong học kỳ yêu cầu và đã có điểm thi)
gửi cho client.
o Client hiển thị kết quả cho người dùng.
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống.
9.3.2.6 Xem thời khoá biểu:
Mô tả: Cho phép người dùng xem thời khoá biểu các học phần của lớp trong
học kỳ hiện tại.
Tác nhân kích hoạt: Người dùng.
181
Java Mobile
Luồng sự kiện chính:
o Người dùng chọn chức năng xem thời khoá biểu.
o Client yêu cầu người dùng nhập thông tin lớp học muốn xem thời
khoá biểu (tên lớp, số thứ tự lớp).
o Người dùng nhập thông tin theo yêu cầu và nhấn nút xem thời khoá
biểu lý thuyết hoặc thời khoá biểu thực hành.
o Client gửi yêu cầu lên server.
o Server truy cập cơ sở dữ liệu, lấy danh sách thông tin các học phần lý
thuyết hoặc học phần thực hành có mở trong học kỳ này theo yêu cầu,
gửi trả về cho client.
o Client hiển thị kết quả trả về cho người dùng.
9.3.2.7 Xem thông báo:
Mô tả: Hỗ trợ người dùng xem các thông báo của giáo vụ khoa.
Tác nhân kích hoạt: Người dùng.
Luồng sự kiện chính:
o Người dùng chọn chức năng xem thông báo.
o Client gửi yêu cầu lên server.
o Server truy cập cơ sở dữ liệu, lấy tiêu đề của 10 thông báo gần đây
nhất, sắp xếp theo thời gian giảm dần, gửi về cho client.
o Client hiển thị các tiêu đề thông báo này cho người dùng.
Luồng sự kiện phụ:
o Nếu người dùng chọn một trong các tiêu đề và nhấn nút xem thông
báo. Client sẽ gửi yêu cầu đến server.
o Server truy cập cơ sở dữ liệu để lấy nội dung thông báo, trả về cho
client. Client hiển thị nội dung này lên màn hình cho người dùng.
182
Java Mobile
9.4 Thiết kế mô hình dữ liệu:
9.4.1 Mô hình thực thể kết hợp:
Hình 9.4 Mô hình thực thể kết hợp ER
9.4.2 Các bảng dữ liệu:
ChuyenNganh: MaChuyenNganh, TenChuyenNganh
SV: MaSV, TenSV, NgaySinh, DiaChi, ChuyenNganh, password
MonHoc: MaMH, TenMonHoc, SoTCLT, SoTCTH
183
Java Mobile
GV: MaGV, TenGV, DiaChi
Lop: MaLop, TenLop, STT
Lop_MonLT: MaLopLT, MaLop, STT, MaMH, HK, NamHoc, SiSo, SiSoMax,
MaGV, Phong, Thu, Tiet
Lop_MonTH: MaLopTH, MaLopLT, STT, SiSo, SiSoMax, Phong, Thu, Tiet
PhanCongTH: MaGV, MaLopTH
DangKyLT: MaSV, MaLopLT, DiemLT, DiemTH, DiemTC
DangKyTH: MaSV, MaLopTH
ThongBao: MaThongBao, NgayTB, TieuDe, NoiDung
9.4.3 Chi tiết các bảng dữ liệu:
9.4.3.1 ChuyenNganh:
Các chuyên ngành của khoa
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaChuyenNganh nvarchar(4) Mã chuyên ngành Khóa chính
TenChuyenNganh nvarchar(100) Tên chuyên ngành
Bảng 9.2 Table ChuyenNganh
9.4.3.2 SV:
Lưu trữ thông tin của sinh viên
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaSV nvarchar(10) Mã số sinh viên Khóa chính
TenSV nvarchar(60) Tên sinh viên
NgaySinh datetime Ngày sinh của sinh viên
DiaChi nvarchar(100) Địa chỉ của sinh viên
ChuyenNganh nvarchar(4) Mã chuyên ngành Khoá ngoại
password nvarchar(25) Mật mã account của sinh viên
Bảng 9.3 Table SV
184
Java Mobile
9.4.3.3 MonHoc:
Lưu trữ thông tin môn học
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaMH nvarchar(5) Mã môn học Khoá chính
TenMH nvarchar(30) Tên môn học
SoTCLT int Số tín chỉ lý thuyết
SoTCTH int Số tín chỉ thực hành
Bảng 9.4 Table MonHoc
9.4.3.4 GV:
Lưu trữ thông tin giáo viên
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaGV int Mã giáo viên Khoá chính
TenGV nvarchar(60) Tên giáo viên
DiaChi nvarchar(100) Địa chỉ liên lạc của giáo viên
Bảng 9.5 Table GV
9.4.3.5 Lop:
Lưu thông tin lớp
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaLop nvarchar(12) Mã lớp Khoá chính
TenLop nvarchar(10) Tên lớp (niên khoá tương ứng)
STT int Số thứ tự lớp (cùng niên khoá)
Bảng 9.6 Table Lop
9.4.3.6 Lop_MonLT:
Lưu thông tin các học phần lý thuyết được mở trong mỗi học kỳ
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaLopLT int Mã học phần Khoá chính
185
Java Mobile
MaLop nvarchar(12) Mã lớp tương ứng Khoá ngoại
STT int STT lớp (nếu mở nhiều lớp nhỏ
như các lớp Anh văn)
MaMH nvarchar(5) Mã môn học Khoá ngoại
HK int Học kỳ (1 hay 2)
NamHoc nvarchar(9) Năm học (vd: 2004-2005)
SiSo int Sĩ số đăng ký hiện tại
SiSoMax int Sĩ số dự kiến
MaGV int Mã giáo viên phụ trách Khoá ngoại
Phong nvarchar(10) Phòng học
Thu nvarchar(5) Lịch học vào các ngày trong
tuần
Tiết nvarchar(5) Tiết học trong ngày
Bảng 9.7 Table Lop_MonLT
9.4.3.7 Lop_MonTH:
Lưu thông tin các lớp thực hành tương ứng của các lớp lý thuyết
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaLopTH int Mã lớp thực hành Khoá chính
MaLopLT int Mã lớp lý thuyết tương ứng Khoá ngoại
STT int Số thứ tự lớp thực hành(một lớp
lý thuyết có thể có nhiều lớp
thực hành)
SiSo int Sĩ số đăng ký hiện tại
SiSoMax int Sĩ số dự kiến
MaGV int Mã giáo viên hướng dẫn thực
hành
Khoá ngoại
Phong nvarchar(10) Phòng học
Thu nvarchar(5) Lịch học vào các ngày trong
186
Java Mobile
tuần
Tiết nvarchar(5) Tiết học trong ngày
Bảng 9.8 Table Lop_MonTH
9.4.3.8 PhanCongTH:
Phân công giáo viên hướng dẫn thực hành cho từng lớp
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaGV int Mã giáo viên hướng dẫn
MaLopTH int Mã lớp thực hành
Khoá chính
Bảng 9.9 Table PhanCongTH
9.4.3.9 DangKyLT:
Thông tin đăng ký học phần lý thuyết
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaSV nvarchar(10) Mã số sinh viên
Khoá chính
MaLopLT int Mã lớp lý thuyết đăng ký
DiemLT float Điểm thi lý thuyết
DiemTH float Điểm thi thực hành
DiemTC float Điểm tổng cộng
Bảng 9.10 Table DangKyLT
9.4.3.10 DangKyTH:
Thông tin đăng ký học phần thực hành
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaSV nvarchar(10) Mã số sinh viên
Khoá chính
MaLopTH int Mã lớp thực hành đăng ký
Bảng 9.11 Table DangKyTH
9.4.3.11 ThongBao:
Các thông báo của văn phòng khoa
187
Java Mobile
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaThongBao int Mã thông báo (tự động) Khoá chính
NgayTB datetime Ngày ra thông báo
TieuDe nvarchar(100) Tiêu đề của thông báo
NoiDung nvarchar(2000) Nội dung thông báo
Bảng 9.12 Table ThongBao
9.4.4 Ràng buộc dữ liệu:
9.4.4.1 Ràng buộc miền giá trị:
Điểm lý thuyết, điểm thực hành, điểm tổng cộng trong khoảng 0 đến 10.
Ngày sinh của sinh viên phải nhỏ hơn ngày hiện tại.
Năm học có dạng xxxx-yyyy với yyyy=xxxx+1 . Vd: 2004-2005.
Mã môn học có dạng xxyyy với xx là dạng ký tự, yyy là các ký số.
Học kỳ có giá trị 1 hoặc 2.
Sĩ số các lớp lý thuyết, thực hành là số không âm.
Sĩ số tối đa các lớp lý thuyết, thực hành là số dương.
9.4.4.2 Ràng buộc liên thuộc tính:
Điểm thực hành không lớn hơn điểm tổng cộng.
Điểm lý thuyết không lớn hơn điểm tổng cộng.
Các lớp lý thuyết, lớp thực hành có sĩ số không lớn hơn sĩ số max.
Trong cùng một học kỳ, một năm học, các học phần lý thuyết của cùng một môn
học phải có số thứ tự liên tục từ 1.
Trong cùng một lớp lý thuyết, các lớp thực hành phải có số thứ tự liên tục từ 1.
9.4.4.3 Ràng buộc liên quan hệ, liên bộ:
Sĩ số hiện tại của các lớp lý thuyết, lớp thực hành bằng tổng số sinh viên đã đăng ký
học lớp đó.
188
Java Mobile
9.4.4.4 Ràng buộc chu trình:
Sinh viên chỉ được phép đăng ký các học phần thực hành của các học phần lý thuyết
đã đăng ký.
Lop_MonLT
DangKyLT DangKyTH
MaSV
MaLopLT MaLopTH
: Các học phần thực hành có mở ứng với các học phần lý
thuyết SV đã đăng ký
: Các học phần thực hành SV đã đăng ký
Hình 9.5 Ràng buộc chu trình
189
Java Mobile
9.4.5 Mô hình dữ liệu:
Hình 9.6 Mô hình cơ sở dữ liệu
9.4.6 Các chức năng store procedures:
• sp_XEM_DIEM: Lấy điểm thi của sinh viên trong một học kỳ cho
trước hay tất cả các học kỳ.
• sp_XEM_TKB_LT: Lấy thông tin thời khoá biểu lý thuyết của một
lớp khi biết tên lớp và số thứ tự lớp.
• sp_XEM_TKB_TH: Lấy thông tin thời khoá biểu thực hành của một
lớp khi biết tên lớp và số thứ tự lớp.
190
Java Mobile
• sp_DelAllTH: Xoá tất cả đăng ký thực hành của một sinh viên tại
một học kỳ cho trước. (Khi sinh viên hiệu chỉnh đăng ký lý thuyết thì
tất cả các học phần thực hành cũ đã đăng ký sẽ bị xoá trước)
• sp_DelRegisterLT: Xoá đăng ký một học phần lý thuyết.
• sp_getLopLT: Lấy thông tin tất cả các học phần lý thuyết có mở
trong một học kỳ cho trước, có đánh dấu các học phần đã được sinh
viên đăng ký. Dùng để hiển thị danh sách các học phần lý thuyết để
sinh viên đăng ký.
• sp_getLopTH: Lấy thông tin các học phần thực hành có mở tương
ứng với các học phần lý thuyết mà sinh viên đã đăng ký.
• sp_getRegLT: Lấy thông tin đăng ký học phần lý thuyết của sinh
viên trong một học kỳ cho trứơc.
• sp_getRegTH: Lấy thông tin đăng ký học phần thực hành của sinh
viên trong học kỳ cho trước.
• sp_RegisterLT: Thực hiện đăng ký một học phần lý thuyết. (Chỉ cho
phép đăng ký khi sĩ số đăng ký còn nhỏ hơn sĩ số tối đa của học phần
đó)
• sp_RegisterTH: Thực hiện đăng ký một học phần thực hành. (Chỉ
cho phép đăng ký khi sĩ số đăng ký còn nhỏ hơn sĩ số tối đa)
• sp_getNewsTitle: Lấy tiêu đề 10 thông báo gần đây nhất
• sp_getNewsContent: Lấy nội dung một thông báo cụ thể
9.4.7 Thiết kế lớp:
Chương trình phía client chỉ giữ nhiệm vụ nhận yêu cầu từ phía người dùng,
chuyển đến server. Chương trình phía server làm nhiệm vụ xử lý chính và tương tác
với cơ sở dữ liệu.
191
Java Mobile
Hình 9.7 Mô hình Lớp
9.5 Cài đặt - thử nghiệm:
9.5.1 Yêu cầu phần cứng:
• Client: điện thoại hỗ trợ kết nối GPRS (để kết nối mạng), gói JSR172 để hỗ
trợ gửi nhận các gói tin SOAP, gói JSR177 hỗ trợ mã hoá. Có thể sử dụng
chương trình giả lập của điện thoại tương ứng.
• Server: server hỗ trợ kết nối web (có địa chỉ cố định để client kết nối đến).
Cơ sở dữ liệu có thể đặt trực tiếp tại web server hay tại database server riêng
biệt.
192
Java Mobile
9.5.2 Yêu cầu phần mềm:
Client:
• Máy ảo Java j2sdk 1.4.2_05.
• J2ME Wireless Toolkit 2.3.
• Ngoài ra có thể dùng JBuider10 để hỗ trợ soạn thảo chương trình Java,
cũng như các chương trình giả lập điện thoại khác.
Server:
• Dot Net FrameWork.
• Database server phải cài sql server 2000.
9.5.3 Giao diện chương trình:
Server: không cần giao diện.
Client:
193
Java Mobile
Hình 9.8 Sơ đồ các màn hình
194
Java Mobile
9.5.3.1 Màn hình welcome:
Hình 9.9 Màn hình welcome
195
Java Mobile
9.5.3.2 Màn hình đăng nhập:
Hình 9.10 Màn hình đăng nhập
Khi đăng nhập, trước khi bắt đầu kết nối, chương trình hiển thị nhắc nhở
“bạn có thực sự muốn kết nối mạng hay không ?” vì khi kết nối, người dùng phải trả
chi phí cho nhà cung cấp dịch vụ. Nếu đồng ý, nhấn nút OK, chương trình sẽ thực
hiện kết nối và cho biết kết quả đăng nhập, nếu không, người dùng thoát khỏi ứng
dụng.
196
Java Mobile
Hình 9.11 Confirm
197
Java Mobile
9.5.3.3 Menu chức năng:
Hình 9.12 Menu chức năng
198
Java Mobile
9.5.3.4 Màn hình đăng ký lý thuyết:
Hình 9.13 Màn hình đăng ký học phần lý thuyết
199
Java Mobile
9.5.3.5 Màn hình đăng ký học phần thực hành:
Hình 9.14 Màn hình đăng ký học phần thực hành
200
Java Mobile
9.5.3.6 Màn hình xem thời khoá biểu:
Hình 9.15 Màn hình xem thời khoá biểu
201
Java Mobile
9.5.3.7 Màn hình xem kết quả học tập:
Hình 9.16 Màn hình xem kết quả học tập
202
Java Mobile
9.5.3.8 Màn hình xem phiếu đăng ký học phần:
Hình 9.17 Màn hình xem phiếu đăng ký
203
Java Mobile
9.5.3.9 Màn hình xem thông báo:
Hình 9.18 Màn hình xem thời khoá biểu
204
Java Mobile
Chương 10: Tổng kết
10.1 Kết luận:
Sau hơn 5 tháng thực hiện, luận văn đã hoàn thành và đạt được một số kết
quả nhất định. Chúng tôi đã cố gắng trình bày những kiến thức nền tảng trong J2ME
và xây dựng thành công ứng dụng “Đăng ký học phần bằng điện thoại di động”.
Luận văn giới thiệu các kiến thức về lập trình trên điện thoại di động dùng
J2ME, gồm:
• Giới thiệu về CLDC, MIDP.
• Các thành phần của ứng dụng MIDlet.
• Các thành phần giao diện trong MIDlet.
• Lưu trữ dữ liệu với RMS.
• Kết nối mạng với GCF.
• Nhắn tin SMS với WMA.
• …
Từ kết quả này, chúng tôi đã tiến hành xây dựng ứng dụng “Đăng ký học
phần bằng điện thoại di động”, với các kết quả đạt được:
• Ứng dụng hoàn chỉnh, với tương đối đầy đủ các chức năng tương tự
hệ thống đăng ký học phần SMS dành cho sinh viên trên web, có thể
áp dụng trong thực tế.
• Vận dụng tốt các kỹ thuật lập trình bằng J2ME.
• Sử dụng thuật toán DES để mã hoá password, sử dụng khoá bí mật 64
bits.
• Tìm hiểu và ứng dụng công nghệ Web service trong trao đổi dữ liệu
giữa server và client.
Tuy nhiên, vì được thực hiện trong thời gian giới hạn, nên luận văn vẫn còn
một số hạn chế:
205
Java Mobile
• Trong quá trình tìm hiểu công nghệ J2ME, có một số thuật ngữ tiếng
Anh không thể được chuyển ngữ một cách chính xác. Số lượng kiến
thức trong lãnh vực J2ME rất lớn và liên tục được cập nhật nên luận
văn chắc chắn còn nhiều thiếu sót.
• Ứng dụng chỉ được thử nghiệm bằng chương trình giả lập, chưa có
điều kiện chạy trên thiết bị thật.
• Ứng dụng sử dụng cơ sở dữ liệu tự xây dựng nên chưa hoàn toàn
chính xác với thực tế.
Các yêu cầu bắt buộc phải có để thử nghiệm được ứng dụng ở môi trường thực
tế:
• Phải có điện thoại di động hỗ trợ công nghệ JSR 172, ngoài ra để
phục vụ cho nhu cầu mã hoá dữ liệu, điện thoại cần hỗ trợ JSR 177.
• Điện thoại phải truy cập được GPRS và nhà cung cấp phải hỗ trợ dịch
vụ này.
• Phải có một server IIS và một địa chỉ IP thực (có thể đã thông qua
NAT). Do ta truy xuất thông qua nhà cung cấp dịch vụ viễn thông nên
không thể dùng các địa chỉ Private IP (10.0.0.0,172.29.0.0,…) cho
server.
Một số lý do khiến ứng dụng khó áp dụng rộng rãi ở Việt Nam tại thời điểm
hiện tại:
• Hiện tại số lượng điện thoại hỗ trợ bộ thư viện JSR-172 chưa nhiều vì
công nghệ này khá mới. Hiện nay chỉ một số điện thoại ra đời gần đây
là hỗ trợ công nghệ này, nhưng các điện thoại này hầu hết chưa có
mặt tại VN. (Nokia N90, N91; Motorola A860…)
• Công nghệ kết nối mạng được sử dụng là GPRS, hiện tại theo chúng
tôi được biết công nghệ này chỉ được hỗ trợ ở hai thành phố lớn là Hà
Nội và TP.Hồ Chí Minh. Giá cước của loại hình dịch vụ này hiện nay
còn khá đắt, khoảng 50/1Kbyte.
206
Java Mobile
10.2 Hướng phát triển:
Mục tiêu ban đầu của chúng tôi đề ra khi xây dựng ứng dụng là giúp cho sinh
viên của trường Tự Nhiên có thể đăng ký học phần qua điện thoại, tuy nhiên vì các
lý do khách quan về thiết bị phần cứng nên mong muốn của chúng tôi chưa đạt
được. Nhóm sẽ tiếp tục nghiên cứu và quan tâm đến các tin tức cập nhật về công
nghệ, đến khi điều kiện Việt Nam cho phép chúng tôi sẽ thử nghiệm ứng dụng của
mình trong môi trường thực tế.
Hiện tại ứng dụng của chúng tôi đang sử dụng Cơ Sở Dữ Liệu tự xây dựng
nên chưa có sự liên thông với dữ liệu của khoa CNTT. Việc này rõ ràng không
thuận tiện, gây dư thừa và có khả năng xảy ra đụng đột giữa hai hệ thống.Về sau,
nếu được phép chúng tôi sẽ tích hợp ứng dụng với dữ liệu của khoa theo mô hình
sau:
Hình 10.1 Hướng phát triển thực tế
Lúc này Web Service của chúng tôi sẽ đóng vai trò trung gian giữa ứng dụng
J2ME và ứng dụng Đăng Ký Học Phần của Khoa. Yêu cầu duy nhất đối với hệ
thống của khoa CNTT là cung cấp cho chúng tôi những chức năng chính dưới dạng
những hàm được export của một Web Service. Web Service của chúng tôi lúc này
không cần hỗ trợ thao tác với cơ sở dữ liệu mà đóng vai trò biến đổi những dữ liệu
gửi đến từ chương trình trên thiết bị di động để phù hợp với dữ liệu input của hệ
207
Java Mobile
thống của khoa CNTT và ngược lại. Lúc này việc coding trên điện thoại di động và
ứng dụng của Khoa hầu như không có thay đổi vì mọi thay đổi sẽ diễn ra tại web
service trung gian của chúng tôi. Có một điểm cần nói thêm là ứng dụng của khoa
không nhất thiết phải là một web service mà có thể chỉ là một ứng dụng TCP giao
tiếp thông qua socket đơn thuần. Lúc này chúng tôi sẽ giao tiếp với ứng dụng J2ME
qua giao thức web service và giao tiếp với ứng dụng của khoa theo mô hình lập
trình socket quen thuộc vẫn được.
Việc nghiên cứu công nghệ Web Service trong môi trường J2ME sẽ giúp
chúng tôi có thể xây dựng nhiều hệ thống thương mại trực tuyến khác trong tương
lai chứ không đơn thuần gói gọn trong ứng dụng đã trình bày. Công nghệ J2ME và
công nghệ Web Service đều là những công nghệ có tiềm năng to lớn, đặc biệt Web
Service là một công nghệ mới và được chuẩn hoá nên hứa hẹn sẽ vượt qua những
rào cản của các mô hình trước đây. Các ứng dụng thương mại dựa trên Web Service
sẽ có thể hoạt động tốt trong môi trường firewall và không bị rào cản do sự khác
nhau về dữ liệu, cấu trúc của các hệ thống khác nhau. Các nhà phát triển đánh giá
lãnh vực thương mại điện tử trên môi trường thiết bị di động sẽ phát triển rất nhanh
chóng, là ngành công nghiệp sẽ đem lại nhiều tỉ đô la doanh thu. Sự ra đời của Web
Service đã khiến việc xây dựng những ứng dụng thương mại tiến thêm một bước
quan trọng. Một yếu tố quan trọng trong các ứng dụng thương mại điện tử là quá
trình chi trả trực tuyến, chúng ta sẽ thực hiện giao dịch qua một bên trung gian được
gọi là "payment gateway", người đọc có thể tìm hiểu thêm về khái niệm này trên
www.google.com hay www.secpay.com .
Việt Nam là một nước có tỉ lệ người sử dụng điện thoại di động khá cao tuy
nhiên lãnh vực thương mại điện tử lại chưa phát triển. Thói quen giao dịch trực
tuyến chưa được hình thành trong đại đa số người dân. Tuy nhiên, với sự phát triển
nhanh chóng của ngành phần mềm cho thiết bị di động và web service, chúng tôi hy
vọng tương lai sẽ có thêm nhiều ứng dụng phục vụ cho đời sống như mua vé tàu
hoả, máy bay, đặt chỗ khách sạn, xem chỉ số chứng khoán, dự báo thời tiết… qua
208
Java Mobile
môi trường di động. Chúng tôi mong muốn được góp sức cho sự phát triển của lãnh
vực thương mại điện tử qua môi trường di động tại Việt Nam.
209
Java Mobile
Tài liệu tham khảo
Books:
1. Bruce Eckel, Thinking in Java 3rd, Prentice Hall, New Jersey, 1998
2. David Chappell - Tyler Jewell, Java Web Services, O'Reilley, 2002
3. Dreamtech Software Team, Cracking the Code™ , Hungry Minds, 2002
4. James White-David Hemphill, Java in small things, Manning, 2002
5. John W. Muchow, Core J2ME™ Technology & MIDP, Prentice Hall, 2001
6. Kim Topey, J2ME™ in a Nutshell, O’Reilley, 2002
7. Kim Topey,Java Web Service in A Nutshell, O'Reilley, 2003
8. Michael Juntao Yuan, Enterprise J2ME™: Developing Mobile Java
Application, Prentice Hall PTR, 2003
9. MSDN Training, Developing XML Web Services using Microsoft Visual
C#, Microsoft, 2001
10. Roger Riggs, Programming Wireless Devices with the Java™ 2 Platform
Micro Edition, Addision Wesley, 2003
11. Vartan Piroumian, Wireless J2ME™ Platform Programming, Prentice Hall
PTR, 2002
Web Sites:
1. Trang chủ Sun Java
2. Diễn đàn Java Việt Nam
3. Trang chủ tổ chức Java Community Process
4. Trang tài liệu MSDN online
5. Forum của Hãng Nokia, nơi có nhiều tài liệu
cho nhà phát triển.
210
Java Mobile
Phụ Lục A: Hướng dẫn sử dụng công cụ Sun
Wireless ToolKit 2.3
Wireless ToolKit là bộ công cụ giả lập thiết bị di động. Wireless ToolKit cung
cấp các chức năng thuận lợi cho nhà phát triển J2ME như biên dịch các file mã
nguồn, tự phát sinh file JAD và file JAR, giả lập các thiết bị di động với các chức
năng phong phú…
Hình A.1 Công cụ Sun WirelessToolkit 2.3
Để vào màn hình ứng dụng chính của Wireless ToolKit ta sử dụng chức năng
KToolBar. Để tạo một chương trình ứng dụng mới, ta chọn chức năng New Project
211
Java Mobile
Hình A.2 Màn hình chính của công cụ
Sau đó chương trình sẽ yêu cầu chúng ta nhập tên Project và tên của lớp ứng dụng
MIDLet (bao gồm cả tên Package).
Hình A.3 Tạo project mới
Lúc này Wireless ToolKit sẽ tạo một thư mục có tên theo Project Name ta vừa nhập
(J2ME Project) trong thư mục apps của thư mục gốc cài đặt wireless toolkit. Giả sử
ta cài đặt wireless toolkit vào thư mục C:\WTK thì chương trình sẽ tạo thư mục
C:\WTK\apps\J2ME Project\ sau những bước vừa làm như trên.
Sau đó Wireless ToolKit sẽ cung cấp một màn hình tùy chọn
212
Java Mobile
Hình A.4 Các options cho project
Chúng ta sẽ chọn các thư viện mở rộng cần Wireless ToolKit hỗ trợ đối với Project
vừa tạo. Ứng với ứng dụng "Đăng Ký Học Phần" trong luận văn, chúng ta sẽ chọn
Cofiguration sử dụng là CLDC 1.1, check chọn các thư viện JSR 172 (Web Service)
và JSR 177 (hỗ trợ mật mã hóa dữ liệu).
(Ta có thể chọn mục Project/Setting để trở lại màn hình này bất kỳ lúc nào).
Sau đó ta chọn Tab MIDlets
213
Java Mobile
Hình A.5 Chỉnh sửa nội dung file Jad và Jar
Đây là những thuộc tính cực kỳ quan trọng đối với ứng dụng và sẽ được đóng gói
trong file JAD cũng như file manifest của file JAR. (Ý nghĩa các thuộc tính đã được
trình bày rất kỹ ở phần 2.2.4 MIDlet Suite trong báo cáo luận văn).
Trong gói ứng dụng của ta, có thể có nhiều MIDlet và mỗi MIDlet phải được khai
báo chính xác các thuộc tính trong phần này. Đặc biệt phải chú ý đến thuộc tính
Class, ta phải khai báo đúng tên lớp của MIDlet nếu không sẽ phát sinh lỗi trong
quá trình biên dịch.
214
Java Mobile
Sau đó ta có thể dùng các chương trình quản lý file thông dụng để chép các file mã
nguồn của ứng dụng vào thư mục C:\WTK\apps\J2ME Project\ vừa được tạo ra.
Nếu các file mã nguồn nằm trong các package thì ta phải tạo các thư mục con ứng
với các package và đưa các file mã nguồn vào đúng chính xác các thư mục con
tương ứng. Giả sử như trên ta phải tạo thư mục MyPackage trong thư mục
C:\WTK\apps\J2ME Project\ và chép các tập tin mã nguồn vào thư mục MyPackage
vừa tạo đó. Điều này khá quen thuộc với những người dùng đã từng sử dụng ngôn
ngữ Java trước đây.
Ta cần lưu ý, công cụ Wireless Toolkit không phải là bộ công cụ hỗ trợ biên soạn
mã nguồn mà chỉ có chức năng biên dịch, thực thi và đóng gói ứng dụng. Để hỗ trợ
việc soạn thảo mã nguồn chúng ta có thể sử dụng Jbuilder hoặc các chương trình
tương đương.
Biên dịch chương trình
Hình A.6 Biên dich project
Ta dùng tính năng Build để biên dịch các file mã nguồn, nếu không có lỗi
phát sinh ta có thể sử dụng tính năng Run để thực thi chương trình.
Cấu trúc thư mục Project:
Với mỗi Project được tạo ra đều có những thư mục con như sau:
Bin: Chứa file JAD và file JAR sau khi đã được đóng gói.
215
Java Mobile
Classes: Chứa file mã nguồn được biên dịch thành dạng .class
Lib: Chứa các thư viện cộng thêm của Project.
Res: Chứa các file resource như file hình dạng .png của project.
Src: Chứa các file mã nguồn chưa biên dịch dạng .java
Tmpclasses và Tmplib: Các thư mục tạm của wireless toolkit, chúng ta thường
không dùng đến.
Tạo file JAD và file JAR:
Hình A.7 Đóng gói ứng dụng
Ta chọn chức năng Create Package có sẵn trong tab project để phát sinh các file
JAR và file JAD để có thể đưa vào thiết bị thật để sử dụng.
216
Java Mobile
Phụ Lục B: Xây dựng và Sử dụng Web Service
Xây dựng Web Service bằng Microsoft Studio .NET:
Việc xây dựng một web service trong môi trương Visual Studio .Net rất dễ dàng,
chúng ta chỉ cần tạo mới một project ASP.NET (có thể bằng ngôn ngữ C# hoặc
VB.NET)
Hình B.1 Tạo project Web Service
Sau đó ta khai báo một lớp mới để chứa service, lớp này kế thừa từ lớp
System.Web.Services.WebService.
Trong lớp vừa tạo của chúng ta, những hàm nào có nhu cầu export để gọi từ xa
chúng ta khai báo thêm cụm từ [Web Method], lúc này Studio sẽ giúp chúng ta biên
dịch mọi thứ để hình thành một Web Service tương ứng.
217
Java Mobile
Hình B.2 Khai báo lớp và hàm
Trong ví dụ trên chúng ta đã xây dựng lớp Service1 và trong lớp này hàm
HelloWorld() được khai báo là hàm được phép gọi từ xa qua cụm từ “[Web
Method]”, phần còn lại là trách nhiệm của Visual Studio.
Với những đồ án cần export nhiều hàm vào service, trước mỗi hàm cần cho phép
truy cập từ xa ta sẽ thêm định nghĩa WebMethod vào trước mỗi hàm. Ngoài ra
.NET còn cho phép ta định nghĩa nhiều thuộc tính (properties) để tăng thêm tùy
biến cho các hàm service. Thuộc tính quan trọng nhất cần chú ý là EnableSession,
khi khai báo EnableSession=true, trong hàm sẽ cho phép ta sử dụng đối tượng
Session để lưu và truy vấn các biến session.
218
Java Mobile
Hình B.3 Export nhiều hàm cùng lúc
Thực thi Web Service.
Hình B.4 Màn hình thực thi Web Service của IE
Khi chúng ta đưa project này vào IIS và Run ta sẽ nhận được trang tóm tắt các
thông tin về web service, trang này sẽ gồm các hàm được export trong service của
chúng ta và mục Service Description sẽ cung cấp file WSDL cho Web service
tương ứng.
Khi ta click vào phần Service Description, IIS sẽ cung cấp nội dung file WSDL.
File WSDL này sẽ được dùng để xây dựng các lớp giúp truy xuất Web Service vừa
xây dựng (sẽ được trình bày ở phần truy xuất web service bằng J2ME).
219
Java Mobile
Hình B.5 File WSDL
Ta sẽ dùng chức năng Save As… của Web Browser để lưu nội dung file này lại
với phần mở rộng là .wsdl. Nội dung file này rất quan trọng và sẽ được dùng ở phần
sau để truy xuất web service.
Dùng J2ME truy xuất Web Service:
Để truy xuất được web service, chúng ta phải dùng chức năng stub generator của bộ
công cụ wireless toolkit 2.3
220
Java Mobile
Hình B.6 Công cụ Stub Generator
Khi chọn chức năng stub generator, màn hình chức năng sẽ xuất hiện
Hình B.7 Các options của công cụ Stub Generator
Ta chọn đường dẫn đến file WSDL có được, phần Output Package ta sẽ nhập
tên Package cho các lớp được tự động phát sinh.
Các lớp phát sinh này sẽ được đặt ở thư mục output path, ở đây cũng chính là
thư mục source của project. Trong các lớp phát sinh, lớp quan trọng nhất là lớp
Soap_Stub.java (trong trường hợp này là lớp
DKHPServiceSoap_Stub.java). Lớp này có chứa tất cả các hàm mà web service
cung cấp (tương ứng 1-1), để gọi hàm của web service ta chỉ cần tạo một đối tượng
của lớp này và dùng hàm do đối tượng đó cung cấp.
221
Java Mobile
Phụ Lục C: Giới thiệu các thư viện JSR
Như đã đề cập, Java là ngôn ngữ phát triển rất nhanh chóng. Sự phát triển
của ngôn ngữ Java, đặc biệt là J2ME, là nhờ công sức đóng góp của cộng đồng các
nhà phát triển phần mềm. Java Community Process (JCP – là
một chương trình do hãng Sun đề ra nhằm tập hợp ý kiến của các nhà phát triển
khắp nơi để đóng góp cho ngôn ngữ Java. Tổ chức này liên tục đề ra những yêu cầu,
những đặc tả mới cho ngôn ngữ Java, trong đó có J2ME, dưới dạng các Java
Specification Requests (JSR – xxx với xxx là ký số của đặc tả). Các đặc tả này ra
đời rất nhanh chóng và dần trở thành yêu cầu bắt buộc đối với những nhà sản xuất
nếu muốn cạnh tranh với các đối thủ; việc ra đời của các đặc tả này đã tăng thêm
sức mạnh cho ngôn ngữ Java nói chung và dòng ngôn ngữ J2ME nói riêng vốn ban
đầu chỉ nhắm đến các thiết bị nhỏ, ít chức năng.
Trong số các đặc tả cho dòng ngôn ngữ J2ME thì một số đặc tả sau là quan
trọng nhất:
- Connected Limited Device Configuration (CLDC); JSR 30, JSR 139
- Mobile Information Device Profile (MIDP); JSR 37, JSR 118
- Java Technology for the Wireless Industry, (JTWI); JSR 185
- Wireless Messaging API (WMA); JSR 120, JSR 205
- Mobile Media API (MMAPI); JSR 135
- Location API for J2ME; JSR 179
- Security and Trust Services API for J2ME, (SATSA); JSR-177
- Mobile 3D Graphics; JSR-184
- J2ME Web Services APIs, (WSA); JSR 172
- Bluetooth API (JSR-82, Motorola, Java Partner Site)
- J2ME Content Handler API, (CHAPI); JSR 211
Để tìm hiểu về JSR bạn có thể vào trang web
với xxx là mã hiệu của JSR (172,177,…)
222
Các file đính kèm theo tài liệu này:
- CNTT1019.pdf