Mục lục
Trang
PHẦN I: THỰC THI THAM CHIẾU MIDP VÀ MIDlet 1
1. Mô tả cấu trúc 1
2. Môi trường MIDlet 2
3. Vòng đời MIDlet 4
4. Thiết lập và chạy MIDlet 5
5. Phân quyền 6
PHẦN II: TẠO MIDlet 8
1. Thiết lập ban đầu 8
2. Cấu trúc đối tượng 9
3. Kiểm soát đầu vào người dùng .11
4. Tạo phương thức vòng đời cho MIDlet .12
5. Thư viện API (Application Programming Interface) và chế độ bảo mật .13
PHẦN III: BIÊN DỊCH VÀ KIỂM TRA TRƯỚC MỘT MIDlet .15
1. Biên dịch tệp nguồn MIDlet .15
2. Kiểm tra các tệp đã biên dịch .16
2.1. Kiểm tra trước các tệp class. .17
2.2. Kiểm tra trước và sát hạch lại các tệp class . .172. rước các tệp class dịchng Thăng Long
48 trang |
Chia sẻ: lynhelie | Lượt xem: 1150 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Luận văn Xây dựng chương trình tra cứu tỷ giá hối đoái qua Mobile, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
.microedition.io.HttpsConnection
API dành cho việc tạo các yêu cầu HTTP bảo mật (https://)
javax.microedition.io.Connector
API dành cho việc tạo các kết nối cho các giao thức
HTTP
HTTPS
Datagram
Datagramreceiver
Socket
Serversocket
SSL
Comm
javax.microedition.io.PushRegistry
API dành cho việc thiết lập MIDlet để sử dụng chức năng push (đó là, thiết lập MIDlet để thiết bị chạy và kiểm soát được thông điệp đến
Không phải tất cả các API đều được bảo mật. Bảng dưới đây chỉ ra các API được sử dụng rộng rãi:
Bảng 3: Các API không đòi hỏi cấp phép
API
Mô tả
javax.microedition.rms
API dành cho việc sử dụng vật lưu dữ liệu lâu dài trên thiết bị
javax.microedition.midlet
Lớp MIDlet và các API vòng đời MIDlet
javax.microedition.lcdui
API giao diện người sử dụng
javax.microedition.lcdui.game
API dành cho các MIDlet là các trò chơi (game)
javax.microedition.media và javax.microedition.media.controls
API dành cho việc chơi các file âm thanh trên thiết bị
Phần III
Biên dịch và kiểm tra trước một MIDlet
Giống như tất cả các ứng dụng được viết bằng ngôn ngữ lập trình JavaTM, bạn phải biên dịch một MIDlet trước khi chạy nó. Ngoài ra bạn còn phải kiểm tra trước MIDlet đó. Mỗi bước kiểm tra trước sẽ thêm thông tin vào các tệp .class để chúng có thể chạy trong môi trường MIDlet (các tệp .class này vẫn có thể chạy bằng Java 2 Platform, Standard Edition).
Khi chạy MIDlet, bạn sẽ sử dụng các tệp .class đã được kiểm tra. Do đó, khi biên dịch MIDlet, bạn đặt các tệp đã được biên dịch vào trong một thư mục tạm để kiểm tra trước. Đặt đầu xuất cho việc kiểm tra trong một vị trí cố định hơn, từ đó bạn có thể đóng gói hay thực thi MIDlet. Hình sau đây sẽ giải thích cho quá trình này:
Hình 7: Quá trình xây dựng một MIDlet
Biên dịch tệp nguồn MIDlet
Để biên dịch một MIDlet ta sử dụng trình biên dịch thường lệ javac. Sử dụng tùy chọn –d để javac tất cả các tệp .class là đặt vào trong một thư mục đơn tạm. Điều này tạo cho những bước tiếp theo của quá trình xây dựng MIDlet được dễ dàng hơn.
Ví dụ, để tạo một thư mục đầu xuất C:\MyMIDlet\tmpclasses, và biên dịch MIDlet trong thư mục đó, bạn nhập lệnh tiếp theo:
C:\cd MyMIDlet
C:\MyMIDlet> mkdir tmpclasses
C:\MyMIDlet> javac –classpath classes -d tmpclasses src/example/HelloMIDlet.java
Có một tùy chọn cho javac mà bạn sử dụng nếu MIDlet của bạn đang dùng chức năng push được định nghĩa trong Đặc tả MIDP 2.0, tùy chọn này là -bootclasspath. (Chức năng push cho phép MIDP thực thi một MIDlet để quản lý một thông điệp được gửi đến nó. Ví dụ, nếu bạn đang viết một MIDlet để một người sử dụng có thể nhận các báo cáo về giao thông, bạn có thể có MIDlet sử dụng chức năng push để nhận những cảnh báo đề phòng cho tuyến đường của người sử dụng).
Tùy chọn –bootclasspath phải chỉ định vị trí của các tệp MIDP class (MyMIDlet/classes) bởi vì trận tự của các lớp trong J2SE và J2ME là khác nhau. Ví dụ, lớp FilterInputStream của J2SE không phải là phần trong J2ME. Nếu MIDlet được biên dịch với các lớp J2SE, nó sẽ kiểm tra lỗi trước (bước tiếp theo trong quá trình xây dựng MIDlet). Với lựa chọn –bootclasspath, javac sử dụng các tệp class trong J2ME.
Ví dụ tiếp theo sẽ chỉ ra câu lệnh javac và tùy chọn –bootclasspath được sử dụng để biên dịch MIDlet PushExample:
C:\MyMIDlet> javac –bootclasspath c:/MyMIDlet/classes –classpath
C:/MyMIDlet/classes PushExample.java
Chú ý: Câu lệnh sử dụng cả hai tùy chọn – bootclasspath và -classpath. Tùy chọn –classpath cung cấp nơi lưu giữ lệnh javac để tìm kiếm các lớp không có trong J2SE, như các lớp trong gói javax.microedition. Điều này không ảnh hưởng đối với nền tảng được sử dụng (J2SE hoặc J2ME). Tùy chọn –bootclasspath chỉ định vị trí của các tệp nền tảng Java.
Kiểm tra các tệp đã biên dịch
Trình kiểm tra trước tạo ra các tệp .class mới chứa thông tin thêm vào trong thực thi tham chiếu bắt buộc. Nếu một lớp không được kiểm tra trước, MIDP sẽ không cho phép sử dụng nó (các lớp đã được kiểm tra trước vẫn có thể được sử dụng với một JRE (Java 2 Runtime Environment). Trình kiểm tra trước cũng có thể kiểm tra các tệp class để chắc chắn là chúng không sử dụng các đặc điểm của ngôn ngữ lập trình Java mà bị chặn bởi đặc tả CLDC (để biết thêm thông tin về đặc tả CLCD, bạn vào:
Trình kiểm tra trước nằm trong thư mục \bin; chứa tệp thực thi preverify. Sử dụng lệnh không có các tùy chọn trợ giúp. Ví dụ, bạn có thể nhận trợ giúp với câu lệnh:
C:\MyMIDlet\bin> preverify
2.1 Kiểm tra trước các tệp class
Cách đơn giản nhất để chạy trình kiểm tra trước là phải tạo các tệp .class mà không cần kiểm tra các đặc điểm ngăn cấm.
Với cách này, có thể bạn muốn sử dụng trình kiểm tra trước nếu bạn biên dịch lại sau khi đã ấn định được những lỗi đơn giản.
Theo các này, để chạy trình kiểm tra trước, bạn phải cung cấp các lớp và các tệp đầu vào để được kiểm tra. Các tệp đầu vào có thể là thư mục chứa các tệp .class, hoặc JAR, hay ZIP. Nếu bạn cung cấp một thư mục, trình kiểm tra trước cũng kiểm tra các thư mục con của nó. Ví dụ sau đây sẽ chỉ ra câu lệnh preverify được sử dụng để kiểm tra .class trong thư mục tmpclasses và trong các thư mục con của nó:
C:\MyMIDlet> bin\preverify -classpath classes; tmpclasses tmpclasses
Theo mặc định, trình kiểm tra trước sẽ ghi các tệp class mới vào thư mục ./output. Bạn có thể thay đổi thư mục này như trong ví dụ sau bằng cách kiểm tra trước một tệp class và đưa nó vào thư mục classes:
C:\MyMIDlet> bin\preverify -classpath classes; tmpclasses -d classes HelloMIDlet
Sau khi bạn chạy trình kiểm tra trước, những nội dung của thư mục đầu ra sẽ tương ứng với kiểutất cả các tệp của các tệp đầu vào mà bạn cung cấp. Thư mục này sẽ chứa một tệp .class, một cây thư mục tương ứng với mỗi thư mục đầu vào, và một tệp JAR tương ứng với mỗi tệp JAR đầu vào.
Kiểm tra trước và sát hạch lại các tệp class
Trong ngôn ngữ lập trình Java, để sử dụng cả 2 đặc điểm này không nằm trong đặc tả CLDC, bạn cần phải sử dụng một hoặc nhiều hơn các tham số cho câu lệnh preverify. Các tham số kèm theo có thể kiểm tra tính hiện hữu của các điểm hoạt động động, sử dụng trình hoàn thiện và triệu gọi phương thức nguyên thủy từ các lớp ứng dụng. Ví dụ sau kiểm tra các vấn đề được đề cập ở trên:
C:\MyMIDlet> bin\preverify -nofp -nofinalize -nonative -classpath classes; tmpclasses -d classes HelloMIDlet
Ví dụ tiếp theo là một phiên bản đơn giản hơn phiên bản trước đó. Nó sử dụng một chuyển đổi đơn tương đương với cách sử dụng cùng lúc các tham số -nofp, -nofinalize, và nonative:
C:\MyMIDlet> bin\preverify -cldc -classpath classes; tmpclasses -d classes HelloMIDlet
Phần IV
Đóng gói MIDlet
Để người sử dụng có thể tải về và chạy một MIDlet bạn phải tiến hành đóng gói MIDlet đó vào trong một bộ MIDlet. Một bộ MIDlet gồm 2 tệp: tệp JAR – dùng để quản lý các lớp MIDlet và tài nguyên (như đồ họa), và tệp JAD (JavaTM Application Description) – dùng để quản lý các giá trị và thuộc tính mô tả cho bộ MIDlet và các MIDlet nằm trong nó.
Các mục sau đây sẽ mô tả một MIDlet được đóng gói vào bộ MIDlet như thế nào:
Tạo tệp JAR
Tệp JAR là một gói gồm nhiều tệp được kiểm tra trước cho MIDlet và các tệp hỗ trợ, như đồ họa. Bạn tạo tệp JAR bằng câu lệnh jar (câu lệnh này được phân phối trong J2SE).
Một tệp JAR được dùng để phân phối một bộ MIDlet phải có:
Một tệp hiển minh (text).
Các tệp class của các MIDlet trong bộ.
Các tệp tài nguyên (như đồ họa) dành cho các MIDlet trong bộ.
Các bước để tạo một tệp JAR:
Bước 1: Phải bảo đảm rằng tất cả các tệp class (đã được kiểm tra trước) của bộ MIDlet nằm trong thư mục yêu cầu của nó.
Ví dụ:
c:\MyMIDlet> dir classes
Volume in drive C has no label.
...
05/21/2008 03:32p 1,555 HelloMIDlet.class
...
Bước 2: Chép các tệp tài nguyên dành cho các MIDlet vào thư mục chứa các tệp đã được kiểm tra trước.
Giả dụ như MIDlet không có các tệp tài nguyên, nó sẽ yêu cầu một tệp đồ họa mySplashImage.pnp. Câu lệnh sau sẽ chép tệp đồ họa này vào trong thư mục classes:
c:\MyMIDlet> cp src/example/mySplashImage.png classes/
Bước 3: Đặt tên cho tệp JAR
Trong bước này bạn phải chỉ định cho tệp jar một cái tên. Ví dụ bạn đặt tên cho MIDlet đầu tay của bạn là HelloMIDlet.jar
Bước 4: Chuyển đến vị trí của thư mục có các tệp class đã được kiểm tra và các tệp tài nguyên.
Ví dụ:
c:\MyMIDlet> cd classes
Bước 5: Tạo một tệp hiển minh
Tệp hiển minh là một tệp văn bản có phần mở rộng là .mf (đơn giản là tạo bằng Notepad). Trong tệp này ít nhất phải có các thuộc tính sau:
MIDlet–Name – Tên sẽ được biểu thị cho người sử dụng
MIDlet–Version – Số hiệu phiên bản của MIDlet trong đặc tả major.minor.micro (được mô tả trong Đặc tả phiên bản Sản phẩm Java:
MIDlet–Vendor : Tác giả của MIDlet.
Nếu sử dụng các gói API bảo mật nhạy cảm, bạn có thể khai báo chúng trong tệp hiển minh này (nếu không nằm trong tệp này, chúng phải nằm trong tệp JAD). Để khai báo chúng, sử dụng các thuộc tính sau:
MIDlet–Permissions – Các đặc quyền quyết định cho chức năng hợp lệ của bộ MIDlet
MIDlet–Permissions – Opt – cung cấp các tùy chọn đặc quyền mà MIDlet mong muốn (giả dụ sử dụng thuộc tính này nếu bộ MIDlet thực thi với các chức năng giảm thiểu).
Giữa MIDle–Permissions và MIDlet–Permissions – Opt là các dấu phẩy ngăn cách, khoảng trắng (Unicode U+0020) và các tab (Unicode U+0009) sẽ được bỏ qua. Bảng sau đây sẽ chỉ ra sự tương ứng giữa chức năng của MIDP và các đặc quyền:
Bảng 4: API và các Đặc quyền tương đương
API
đặc quyền tương đương
javax.microedition.io.HttpConnection
javax.microedition.io.Connector.http
javax.microedition.io.HttpsConnection
javax.microedition.io.Connector.https
javax.microedition.io.Connector
Sử dụng các đặc quyền tương đương với giao thức bạn sử dụng khi tạo một kết nối:
javax.microedition.io.Connector.http
javax.microedition.io.Connector.https
javax.microedition.io.Connector.datagram
javax.microedition.io.
Connector.datagramreceiver
javax.microedition.io.Connector.socket
javax.microedition.io.Connector.serversocket
javax.microedition.io.Connector.ssl
javax.microedition.io.Connector.comm
javax.microedition.io.PushRegistry
javax.microedition.io.PushRegistry
Tệp hiển minh cũng có thể chứa các thuộc tính sau (các thuộc tính không nằm trong tệp này phải nằm trong tệp JAD):
MIDlet–n – các dấu phẩy ngăn cách giữa tên của MIDlet, biểu tượng, và lớp. Trong đó: tham số n chỉ ra phần tử MIDlet thứ n trong tệp JAR. Giá trị nhỏ nhất của n là 1 và n tăng lên 1 đơn vị cho mỗi MIDlet tiếp theo; đồng thời cũng cung cấp một biểu tượng để để lựa chọn.
MicroEdition–Profile – Các đặc tả nền tảng J2ME mà MIDlet yêu cầu. Ngăn cách giữa các đặc tả là một khoảng trắng (Unicode x20). Theo MIDP 2.0, trị số này có trong đặc tả MIDP 2.0.
MicroEdition–Configuration – cấu hình nền tảng J2ME mà MIDlet yêu cầu. Giữa các cấu hình là một khoảng trắng (Unicode x20). Theo MIDP 2.0, trị số này có trong đặc tả CLDC-1.0.
Tệp hiển minh cũng cho phép lưu trữ các thuộc tính khác. Để biết thêm thông tin về các thuộc tính hợp lệ trong một tệp JAR của một MIDlet, xem đặc tả MIDP 2.0 [JSR-000118] tại địa chỉ:
Ví dụ, tệp hiển minh dành cho tệp HelloMIDlet.jar, gọi là HelloMIDlet.mf trông như sau:
MIDlet-Name: HelloWorld
MIDlet-Version: 2.0
MIDlet-Vendor: Sun Microsystems, Inc.
Bước 6: Tạo tệp JAR với công cụ jar
Đưa tệp hiển minh, các tệp .class và các tệp tài nguyên vào trong tệp JAR (xem tài liệu nền tảng Java của bạn để biết thêm thông tin về câu lệnh jar).
Ví dụ:
c:\MyMIDlet\classes> jar -cmf HelloMIDlet.mf HelloMIDlet.jar HelloMIDlet.class
Tạo tệp JAD
Một tệp JAD là một tệp văn bản mà bạn có thể tạo bằng bất kỳ một trình soạn thảo nào (giả sử dùng Notepad). Nó có cú pháp như sau:
attribute: value
Tệp JAD phải có ít nhất các thuộc tính sau:
MIDlet–Name – Tương tự thuộc tính trong tệp JAR. Xem lại bước 5 của mục trên.
MIDlet–Version – Tương tự thuộc tính trong tệp JAR. Xem lại bước 5 của mục trên.
MIDlet–Vendor – Tương tự thuộc tính trong tệp JAR. Xem lại bước 5 của mục trên.
MIDlet–Jar–URL – Vị trí của tệp JAR.
MIDlet–Jar–Size – Kích thước của tệp JAR (byte).
Tệp JAD cũng có thể chứa các thuộc tính khác, bao gồm các thuộc tính có ở bước 5 của mục trước. Để biết thêm thông tin về các thuộc tính hợp lệ trong tệp JAD của một MIDlet, xem đặc tả MIDP 2.0 [JSR-000118] tại địa chỉ:
Tệp JAR và JAD phải có các trị số cho các thuộc tính MIDlet–Name, MIDlet–Version, và MIDlet–Vendor. Nếu các trị số không giống nhau thì MIDP không cho phép tải MIDlet.
Nếu các thuộc tính khác của tệp JAR và tệp JAD giống nhau thì các thủ tục sẽ phụ thuộc vào độ tin cậy của bộ MIDlet:
Trusted – Những trị số của các thuộc tính giống nhau phải y hệt nhau hoặc Thực thi tham chiếu MIDP sẽ không cho phép tải MIDlet.
Not trusted – Những trị số của các thuộc tính giống nhau có thể khác nhau. Nếu chúng khác nhau, MIDP sẽ sử dụng các trị số có trong tệp JAD.
Ví dụ, tệp JAD của MIDlet Hello, HelloMIDlet.jar có thể trông như thế này:
MIDlet-Name: HelloWorld
MIDlet-Version: 2.0
MIDlet-Vendor: Sun Microsystems, Inc.
MIDlet-Jar-URL: HelloMIDlet.jar
MIDlet-Jar-Size: 1212
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.0
MIDlet-1: Hello World,, HelloMIDlet
Dấu hiệu xác nhận tệp JAR
Thiết lập độ tin cậy hết sức quan trọng đối với các bộ MIDlet, đó là việc sử dụng các gói thư viện API bảo mật nhạy cảm. Do đó các MIDlet tin cậy có thể truy xuất chức năng bảo vệ hơn là các MIDlet không tin cậy. Kiểm tra chữ ký của bộ MIDlet là cách mà một thiết bị có thể xác định được một bộ MIDlet có đáng tin hay không. Khi có một kết quả, dấu hiệu xác nhận một bộ MIDlet tạo ra chữ ký phù hợp để bộ MIDlet của bạn đáng tin hơn. (Xem thêm mục Sử dụng MIDP để biết thêm thông tin về chữ ký và xác nhận).
HelloMIDlet không truy xuất các gói API bảo vệ, bởi vì nó không cần để nhận dạng bộ MIDlet. Mục này cho ta thấy bộ MIDlet làm việc như thế nào.
Bộ MIDlet trong ví dụ dưới đây sẽ chỉ ra cặp khóa trong thuận toán mã hóa RSA được giải phóng. Cặp khóa nằm trong thư mục \bin\j2se_test_keystore.bin là một khóa có thể quản lý tiện ích keytool của nền tảng J2SE.(Xem tại: để biết thêm thông tin về tiện ích keytool). Mật khẩu cho tệp này là keystorepwd. Bí danh của cặp khóa là dummyca và mật khẩu chìa khóa riêng là keypwd. Tệp này được cung cấp cho các mục đích kiểm tra.
Khi phát hành các MIDlet, có thể bạn sẽ sử dụng một cặp khóa RSA kèm theo để xác nhận hoặc xác định độ dài trong một keystore J2SE với tiện ích keytool của nền tảng J2SE.
Để thực hiện việc này, ta làm theo các bước sau:
Bước 1: Thêm chứng chỉ cho cặp khóa công cộng vào tệp JAD bằng cách sử dụng tiện ích JadTool
Tiện ích JadTool sẽ thêm chứng nhận như trị số của thuộc tính có tên MIDlet–Certificate–m–n. Trong đó, m là số chuỗi xác thực (mặc định là 1; bạn có thể cung cấp một trị số khác với khóa chuyển đổi –chainnum), và n là một số nguyên dành cho các chứng thực mới, bắt đầu từ 1 và mỗi bước tăng lên 1 đơn vị khi bạn thêm các chứng thực mới vào tệp JAD.
Ví dụ, câu lệnh sau đây sẽ thêm chứng thực MIDlet–Certificate–1–1 vào tệp JAD:
c:\MyMIDlet\classes> java -jar ../bin/JadTool.jar -addcert -keystore ../bin/j2se_test_keystore.bin -alias dummyca -storepass keystorepwd -inputjad HelloMIDlet.jad -outputjad HelloMIDlet.jad
Bước 2: Kiểm tra chứng thực đã được thêm vào tệp JAD bằng cách sử dụng tiện ích JadTool
c:\MyMIDlet\classes> java -jar ../bin/JadTool.jar -showcert -certnum 1 -inputjad HelloMIDlet.jad
Subject: C=US, ST=CA, L=Santa Clara, O=dummy CA, OU=JCT, CN=thehost
Issuer : C=US, ST=CA, L=Santa Clara, O=dummy CA, OU=JCT, CN=thehost
Serial number: 3d3ece8a
Valid from Wed Jul 24 08:58:02 PDT 2002 to Sat Jul 21 08:58:02 PDT 2012
Certificate fingerprints:
MD5: 87:7f:5e:64:c8:dd:b4:bf:35:39:76:87:99:9b:68:82
SHA: 9d:c0:88:ce:08:83:cd:e6:fe:13:8b:26:f6:b4:df:e2:da:3c:25:98
Bước 3: Nếu bạn có một cặp khóa đi kèm một chuỗi xác thực, nhập khẩu các chứng thực trung gian
Nhập khẩu các chứng thực trung gian bằng cách sử dụng tiện ích JadTool với khóa chuyển đổi là -addcert (đã được đề cập ở bước 1), hãy thận trọng khi sử dụng sắp xếp chuỗi. Đó là, nếu công ty Acme cung cấp một chứng thực xác nhận cặp khóa của bạn, và công ty WidgetCertificates xác nhận chứng thực của Acme, và cuối cùng Verisign xác nhận chứng thực của WidgetCertificates, bạn nên nhập khẩu chứng thực Acme ngay sau WidgetCertificates. Chứng thực Acme có thể là MIDlet–Certificate–1–2 và của WidgetCertificates có thể là MIDlet–Certificate–1–3.
Chú ý: Bạn không nhập khẩu chứng thực của root CA (đó là chứng thực ở cuối dãy, trong ví dụ này là chứng thực của Verisign). Khóa công cộng của CA sẽ ở trên thiết bị.
Bước 4: Sử dụng tiện ích JadTool để nhận dạng tệp JAR
Tiện ích JadTool sẽ nhận dạng tệp JAD, chữ ký mã hóa 64bit, và lưu trữ nó ở trị số của thuộc tính đầu ra tệp JAD là MIDlet–Jar–RSA–SHA1.
Chú ý: Phải chắc chắn là chìa khóa mà bạn sử dụng để nhận dạng tệp JAR là lấy từ mục nhập keystore JCA, đó là cặp chìa khóa được đề cập ở bước 1. Tiện ích JadTool không kiểm tra khi bạn đang nhận dạng tệp JAR với một mục nhập keystore, đó là một chứng thực trong tệp JAD.
Ví dụ:
c:\MyMIDlet\classes> java -jar ../bin/JadTool.jar -addjarsig -keystore ../bin/j2se_test_keystore.bin -alias dummyca -storepass keystorepwd -keypass keypwd -jarfile HelloMIDlet.jar -inputjad HelloMIDlet.jad -outputjad HelloMIDlet.jad
Phần V
Phát hành MIDlet
Để phát hành một bộ MIDlet, ta đưa nó lên một web server để người sử dụng có thể tải về. Việc phát hành được thực hiện theo các bước sau:
Bảo đảm rằng web server được cấu hình theo cam kết MIME cho các tệp JAR và JAD
Kiểu MIME cho một tệp JAD như sau:
text/vnd.sun.j2me.app-descriptor
Kiểu MIME cho một tệp JAR như sau:
application/java-archive
Đặt các tệp JAR và JAD vào trong một thư mục mà web server có thể truy xuất
Tạo một tệp HTML chứa liên kết tới tệp JAD của bạn
Tệp HTML cung cấp cho người sử dụng cách thức để tìm kiếm và tải về MIDlet của bạn. Công việc tìm kiếm và tải về một MIDlet được gọi là OTA (over the air provisioning).
Tệp HTML không yêu bất cứ cách bố trí hay một cái tên cụ thể nào. Khi người sử dụng thực thi midp để tìm kiếm và tải về các MIDlet, họ có thể nhập vào một URL và MIDP sẽ chỉ hiển thị những kết nối tới URL đó. Nó sẽ bỏ qua phần còn lại trong trang HTML đó.
Ví dụ, trang get–hello.html của MIDlet Hello có thể trông đơn giản như sau:
The Hello MIDlet
<a href=""
>Hello MIDlet
Chú ý: Mặc dù không bắt buộc định dạng cụ thể cho tệp HTML, song khoảng trắng trong tệp có thể ảnh hưởng đến cách bài trí tên của bộ MIDlet trên thiết bị. Ví dụ, nếu tệp HTML có từ liên kết là “Hello MIDlet” thì sẽ xuất hiện dấu xuống dòng giữa hai từ Hello và MIDlet, hiển thị giống như trên thiết bị mô phỏng:
Hình 8: Khoảng trắng trong một trang HTML được hiển thị trên một thiết bị.
Đặt tệp HTML vào trong thư mục hiển thị của web server
Kiểm tra liên kết từ trang HTML tới tệp JAD, và từ tệp JAD tới tệp JAR
Có một cách để thực hiện việc này là chạy thiết bị mô phỏng.
Phần Vi
Xác định vị trí và sửa chữa lỗi
Thực thi tham chiếu MIDP cung cấp cho nền tảng Java các cấp độ gỡ lỗi thông qua cấu trúc gỡ lỗi CLDC (xem tài liệu mô tả cấu trúc gỡ lỗi trong tài liệu CLDC). Trong phần này chỉ đề cập ngắn gọn các bước mà bạn có thể sử dụng cấu trúc và báo cáo các vấn đề gặp phải.
Gỡ lỗi MIDlet
Trước khi gỡ lỗi một MIDlet, bạn phải có các phiên bản thực thi MIDP và MIDlet, đó là các biểu hiện gỡ lỗi trong các tệp class của chúng. Để biết phiên bản mà bạn đang nắm giữ có được midp thừa nhận hay không, bạn thực hiện lệnh midp với tùy chọn –help.
Nếu khi thực thi ngôn ngữ lập trình Java có khả năng gỡ lỗi, bạn sẽ thấy được danh sách các tùy chọn –debugger. Ví dụ:
C:\midp2.0fcs> bin\midp -help
Usage: midp []
Run the Graphical MIDlet Suite Manager.
...
or midp [] -debugger ...
Nếu phiên bản thực thi midp mà bạn đang sử dụng không hỗ trợ gỡ lỗi ngôn ngữ lập trình Java hãy xem các câu lệnh được miêu tả trong mục Porting MIDP (do Sun cung cấp).
Để tạo một phiên bản MIDlet chứa các biểu hiện gỡ lỗi, sử dụng tùy chọn –g trong câu lệnh javac (để biết thêm thông tin xin xem thêm tài liệu nền tảng Java).
Các bước thực hiện gỡ lỗi một MIDlet:
Bước 1: Mở một cửa sổ lệnh (DOS-Command Prompt).
Bước 2: Chuyển tới thư mục hiện thời midpInstallDir.
Ví dụ, nếu Thực thi tham chiếu MIDP được cài đặt trong thư mục c:\midp2.0fcs, bạn có thể chạy câu lệnh:
c:\> cd midp2.0fcs
Bước 3: Khởi động trình thực thi tham chiếu MIDP trong chế độ gỡ lỗi
Sử dụng câu lệnh midp với việc chuyển tùy chọn –debugger và –port. Số hiệu cổng có thể là 2800, đây là số hiệu cổng của proxy trên KVM, nơi trình gỡ lỗi đang chạy (xem tài liệu KVM để biết thêm thông tin về proxy gỡ lỗi).
Ví dụ:
c:\midp2.0fcs\> bin\midp -debugger -port 2800 -classpath classes example.pushpuzzle.PushPuzzle
Bước 4: Khởi động proxy gỡ lỗi
Xem tài liệu KVM để biết thêm thông tin về các tùy chọn, các tham số và cú pháp chính xác. Ví dụ, thực hiện câu lệnh sau trên proxy KVM để kết nối với thực thi midp mà bạn đã khởi động ở bước trước và sau đó lắng nghe ở cổng 5000:
c:\midp2.0fcs\> java -jar c:/kvm/bin/kdp.jar kdp.KVMDebugProxy -l 5000 -p -r localhost 2800 -cp pathsIncludingMIDletClassFiles
Bước 5: Kết nối với proxy gỡ lỗi KVM từ bất kỳ một trình gỡ rối nào đó đều phải tuân theo cấu trúc gỡ lỗi của nền tảng Java
Các trình gỡ lỗi phục tùng bao gồm jdb, SunTM One Studio (trước đó là ForteTM dành cho Java), Jbuilder, Code Warrior, Visual Cafộ, và còn nhiều trình gỡ lỗi khác. Bạn xem tài liệu về các trình gỡ lỗi được đính kèm khi chạy VM trên cổng 5000 của localhost.
Tường trình các vấn đề gặp phải
Bạn có thể gửi các thông tin phản hồi tổng quát, các câu hỏi hay các chú thích tới địa chỉ mail: midp–comments@sun.com. Nếu bạn cho rằng chương trình có lỗi, trước hết hãy kiểm tra những lỗi được phô bày để xem các vấn đề gặp phải đã thực sự được báo cáo hay chưa. Bạn có thể tìm các lỗi trực quan thường có tại địa chỉ:
Nếu phát hiện được lỗi nên sao chép, phân tích và cố định những lỗi đó. Để thực hiện được việc này hãy thu thập các thông tin sau:
Tất cả các nền tảng và thông tin khác nhau, nếu không xây dựng được trên nền tảng chuẩn.
Mô tả lỗi.
Một số thông điệp báo lỗi, các ngoại lệ, dấu vết ngăn xếp, hoặc dữ liệu khác mà bạn đã thu được.
Nếu có thể, dùng kịch bản hoặc đoạn mã biểu thị cho vấn đề gặp phải.
Nhập thông tin về một lỗi trong báo cáo vào URL sau:
Phần ứng dụng
xây dựng chương trình tra cứu tỷ giá hối đoái
Giới thiệu
Chương trình này được viết theo mô hình khách/chủ, thông thường được phân ra thành 2 phần: Một phần được viết để chạy trên máy chủ, phần còn lại được viết để chạy trên máy khách.
Chương trình ở máy khách là một MIDlet, thực hiện các nhiệm vụ sau:
Kết nối với máy chủ (qua giao thức Http).
Nhận yêu cầu do người dùng nhập vào từ bên ngoài.
Gửi yêu cầu đến server để server xử lý.
Trình bày nội dung được trả về từ máy chủ cho người dùng xem.
Chương trình ở máy chủ là một trang JSP (Java Server Pages), thực hiện các nhiệm vụ sau:
Lắng nghe các kết nối từ máy khách gửi đến.
Tiếp nhận những yêu cầu từ phía máy khách.
Xử lý các yêu cầu và gửi trả kết quả về cho máy khách.
Như vậy, chương trình ở máy chủ đóng vai trò như một dịch vụ (service) phục vụ cho máy khách.
Xây dựng chương trình
Các tệp mã chương trình phía máy khách (MIDlet):
Tệp About.java
package mygroup;
import javax.microedition.lcdui.*;
public class About {
/** Copyright notice */
private static String copyright =
"Copyright: \n"+"This product is written by the Group 1, including the members:" + "\n\n"
+ " " + "Văn Minh, Nguyễn (group leader)" + "\n"
+ " " + "Trung Hiếu, Nguyễn" + "\n"
+ " " + "Mạnh Dũng, Nguyễn" + "\n"
+ " " + "Tựng Giang, Nguyễn" + "\n"
+ " " + "Đức Anh, Nguyễn" + "\n"
+ " " + "Đức Lõn, Nguyễn" + "\n"
+ " " + "Ngọc Quang, Nguyễn" + "\n"
+ " " + "Cảnh Dương, Bựi" + "\n"
+ " " + "Văn Thuận, Tạ"
+ "\n\n";
private About() {};
/**
* Đưa ra alert About khi người sử dụng nhấp đồng ý quay về
* màn hỡnh trước đú.
* display – tham số Display để quay trở về khi
* màn hỡnh about được giải phúng.
*/
public static void showAbout(Display display) {
Alert alert = new Alert("About this MIDlet");
alert.setTimeout(Alert.FOREVER);
// thờm vào alert nội dung copyright
alert.setString(copyright);
display.setCurrent(alert);
}
}
Tệp HttpView.java (MIDlet)
package mygroup;
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;
import java.lang.String;
/**
* Đõy là một vớ dụ về MIDlet sử dụng một kết nối Http để lấy về
* nội dung của một trang.
* Thực hiện cỏc phương thức startApp, pauseApp, và destroyApp
* để xem MIDlet quản lý mỗi giao dịch yờu cầu như thế nào.
* Lớp HttpView kế thừa (extends) từ gúi javax.microedition.midlet.MIDlet và
* thực thi đầy đủ cỏc phương thức CommandLis
Các file đính kèm theo tài liệu này:
- 7942.doc