Giáo trình Java và công nghệ J2ME

Java la một công nghệđược hãng Sun Microsystems xây dựng từ cuối năm 1990 với tên

gọi Oak và hiện nay đang phát triển vượt bậc với sự đóng góp của hàng vạn lập trình viên

trên thế giới. Ban đầu, Oak được kỹ sư James Gosling và các cộng sự xây dựng với mục

đích lập trình cho các mặt hang điện dân dụng với mục tiêu nhỏ gọn và tương thích được

với nhiều loại thiết bị phần cứng khác nhau. Sau đó Oak được sử dụng trong nhiều dự án

như dự án Xanh (Blue Project), dự án Phim theo yêu cầu (Video on demand Project). Sau

một chuyến du lịch tới đảo Java của Indonesia, nhóm phát triển Oak đã đổi tên Oak thành

Java.

Java mà tiền thân là Oak được xây dựng chủ yếu dựa trên bộ công cụ phát triển

(Java Development Kit - JDK) như là bộ thư viện chuẩn trong đó chứa trình biên dịch,

trình thông dịch, trình đóng gói, và tài liệu.Đây chính là nền tảng cho việc phát triển các

ứng dụng Java. Hiện nay, cộng đồng Java trên thế giới mà đi đầu là hang Sun

Microsystem đã xây dựng nhiều nhánh mới cho Java như: Javamail (thư diện tử), Java

TAPI (viễn thông), Java3D (đồ họa 3 chiều_, J2ME (ứng dụng cho thiết bị di động). Hiện

nay Java có các phiên bản sau:

J2SE

rM

(Java 2 Platform, Standart Edition): Phiên bản chuẩn gồm bộ công cụ thông dụng

dùng để chạy trên các máy PC hoặc các mạng máy tính nhỏ.

J2EE™ (Java 2 Platform, Enterprise Edition): Phiên bản dành cho các máy chủ với bộ

nhớ lớn. Bao gồm các kiến trúc nâng cao như Web, EJB, Transaction dùng để xây dựng

các ứng dụng có quy mô lớn.

pdf97 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 2504 | Lượt tải: 1download
Tóm tắt nội dung Giáo trình Java và công nghệ J2ME, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Duoi day la doan code md ket noi thong qua stream 
// Create a ContentConnection 
String url = ""; 
ContentConnection connection = (ContentConnection) Connector.open(url); 
// With the connection, open a stream 
InputStream iStrm = connection.openInputStream(); 
// ContentConnection includes a length method 
int length = (int) connection.getLength(); 
if (length != -1) { 
byte imageData[] = new byte[length]; 
// Read the data into an array 
iStrm.read(imageData); 
} 
Thật ra chúng ta có thể tọa một kết nối InputStream mà không cần sự có mặt của 
ContentConnection. Tuy nhiên, phương pháp này có hạn chế là không cung cấp phương 
thức để xác định chiều dài dữ liệu. 
Dưới đây là cách mở một kết nối dạng HttpConnection: 
String url = ""; 
HttpConnection http = (HttpConnection) Connector.open(url); 
Sau khi được mở, kết nối này cung cấp truy xuất đến rất nhiều loại luồng mà 
InputStream và DataInputStream là hai trong số đó. Tuy nhiên thế mạnh thực sự của kết nối 
HttpConnection lại nằm ở chỗ nó có khả năng giúp cho lập trình viên loại bỏ các gánh nặng 
của các câu lệnh HTTP. 
Dưới đây là ví dụ đơn giản, đầu tiên MIDlet sẽ download và hiển thị hình ảnh đã tải 
về. MIDlet sẽ dử dụng ByteArrayOutputStream để chứa dữ liệu tải về bởi vì ta không dùng 
ContentConnection nên không thể biết kích cỡ dữ liệu tải vê 
 89 
/* --------------------------------------------------------------------- 
* DownloadImage.java * 
*/ 
import javax.microedition.midlet.*; 
import javax.microedition.lcdui.*; import 
javax.microedition.io.*; import java.io.*; 
public class DownloadImage extends MIDlet implements CommandListener { 
private Display display; 
private TextBox tbMain; 
private Form fmViewPng; 
private Command cmExit; 
private Command cmView; 
 private Command cmBack; 
public DownloadImage() { 
display = Display.getDisplay(this); 
// Create the textbox, allow maximum of 50 characters 
tbMain = new TextBox("Enter url", "", 55, 0); 
// Create commands and add to textbox 
cmExit = new Command("Exit", Command.EXIT, 1); 
cmView = new Command("View", Command.SCREEN, 2); 
tbMain.addCommand(cmExit); 
tbMain.addCommand(cmView ); 
// Set up a listener for textbox 
tbMain.setCommandListener(this); 
// Create the form that will hold the image 
fmViewPng = new Form(""); 
// Create commands and add to form 
cmBack = new Command("Back", Command.BACK, 1); 
fmViewPng.addCommand(cmBack); 
// Set up a listener for form 
fmViewPng.setCommandListener(this); 
} 
public void startApp() { 
display.setCurrent(tbMain); 
} 
public voidpauseApp() {} 
public void destroyApp(boolean unconditional) {} 
public void commandAction(Command c, Displayable s) { 
// If the Command button pressed was "Exit" if (c == cmExit) { 
dstroyAppfalse); notifyDestroyed(); 
} 
else if (c == cmView) { 
// Download image and place on the form 
try { 
Image im; 
if ((im = getImage(tbMain.getString())) != null) { 
ImageItem ii = new ImageItem(null, im,ImageItem.LAYOUTDEFAULT, null); 
// If there is already an image, set (replace) it 
if fmViewPng.size() != 0) 
fmViewPng.set(0, ii); 
else // Append the image to the empty form 
fmViewPng.append(ii); 
} 
else fmViewPng.append("Unsuccessful download."); 
// Display the form with image 
display.setCurrentfmViewPng); 
} 
catch (Exception e) { 
System.err.println("Msg: " + e.toString()); 
} 
} 
else if (c == cmBack) { 
display.setCurrent(tbMain); 
} 
} 
private Image getImage(String url) throws IOException { 
InputStream iStrm = (InputStream) Connector.openInputStream(url); 
Image im = null; 
try { 
ByteArrayOutputStream bStrm = new ByteArrayOutputStream(); 
int ch; 
while ((ch = iStrm.read()) != -1) 
bStrm.write(ch); 
// Place into image array 
byte imageData[] = bStrm.toByteArray(); 
// Create the image from the byte array 
im = Image.createImage(imageData, 0, imageData.length); 
finally { 
// Clean up 
if (iStrm != null) 
iStrm.close(); 
} 
return (im == null ? null: im); 
} 
} 
Một textbox sẽ cho phép nhập địa chỉ URL 
Sau khi tải về, hình ảnh sẽđược hiển thị 
 92 
3. Client Request va Server Response 
Cả HTTP và HTTPS đều gửi request và response. Máy client gửi request, còn server sẽ trả 
về response. Client request bao gồm 3 phần sau: 
- Request method 
- Header 
- Body 
Request method định nghĩa cách mà dữ liệu sẽ được gửi đến server. Có 3 phương thức 
được cung cấp sẵn là GET, POST, HEADER. Khi sử dụng Get, dữ liệu cần request sẽ nằm 
trong URL. Với Post dữ liệu gửi từ client sẽđược phân thành các stream riêng biệt. Trong khi 
đó, Header sẽ không gửi dữ liệu yêu cầu lên server, thay vào đó header chỉ request những 
meta information về server. GET và POST là hai phương thức request khá giống nhau, tuy 
nhiên do GET gửi dữ liệu thông qua URL nên sẽ bị giới hạn, còn POST sử dụng những 
stream riêng biệt nên sẽ khắc phục được hạn chế này. 
Ví dụ về việc mở HTTP Connection thông qua GET 
String url = ""; 
HttpConnection http = null; 
http = (HttpConnection) Connector.open(url); 
http.setRequestMethod(HttpConnection.GET); 
Những Header field sẽ cho phép ta truyền các tham số từ client đến server. Các 
header field thường dùng là If-Modified-Since, Accept, and User Agent. Bạn có thểđặt các 
field này thông qua phương thức setRequestProperty(). Dưới đây là ví dụ dùng 
setRequestProperty(), chỉ có những dữ liệu thay đổi sau ngày 1 tháng 1 năm 2005 mới được 
gửi về từ server: 
String url = ""; 
HttpConnection http = null; 
http = (HttpConnection) Connector.open(url); 
http.setRequestMethod(HttpConnection.GET); 
// Set header field as key-value pair 
 93 
http.setRequestProperty("If-Modified-Since", "Sat, 1 Jan 2005 12:00:00 
GMT");Body chứa nội dung mà bạn muốn gửi lên server. Ví dụ về sử dụng POST và gửi dữ 
liệu từclient thông qua stream: 
String url = ""; 
tmp = "test data here"; 
OutputStream ostrm = null; 
HttpConnection http = null; 
http = (HttpConnection) Connector.open(url); 
http.setRequestMethod(HttpConnection.POST); // Send 
client body ostrm = http.openOutputStream(); byte bytes[] 
= tmp.getBytes(); for(int i = 0; i < bytes.length; { 
os.write(bytes[i]); 
} 
os.flush(); 
Sau khi nhận được và sử lý yêu cầu từ phía client, server sẽ đóng gói và gửi về phía client. 
Cũng như client request, server cũng gồm 3 phần sau: 
Status line 
Header 
Body 
Status line sẽ thông báo cho client kết quả của request mà client gửi cho server. HTTP phân 
loại status line thành các nhóm sau đây: 
1xx is informational 
2xx is success 
3xx is redirection 
4xx is client error 
5xx is server error 
Status line bao gồm version của HTTP trên server, status code, và đoạn text đại diện cho 
status code. 
Vi du: "HTTP/1.1 200 OK" "HTTP/1.1 400 Bad Request" "HTTP/1.1 500 Internal Server 
Error" 
Header. 
Không giống như header của client, server có thể gửi data thông qua header. 
 94 
Sau đây là những phương thức dùng để lấy thông tin Header mà server gửi vê: 
String getHeaderField(int n) Get header field value looking up by 
index 
String getHeaderField(String name) Get header field value looking up by 
name 
String getHeaderFieldKey(int n) Get header field key using index 
Server có thể trả về nhiều Header field. Trong trường hợp này, phương thức đầu tiên sẽ 
cho lấy header field thông qua index của nó. Còn phương thức thứ hai lấy nội dung header 
field dựa vào tên của header field. Còn nếu muốn biết tên (key) của header field, có thể dùng 
phương thức thứ 3 ở trên. 
Sau đây là ví dụ về 3 phương thức trên, trong trường hợp server gửi về chuỗi "content-
type=text/plain". 
Body: Cũng giống như client, server gửi hầu hết những thông tin trong phần body cho client. 
Client dùng input stream đểđọc kết quả trả về từ server. The HttpConnection API Như đã đề 
cập ở trên, ta sẽ sử dụng HttpConnection API để thiết lập kết nối trong MIDP. Dưới đây là 
những API trong HttpConnection: 
Method Description 
long getDate() Get header field date 
long getExpiration() Gets header field expiration 
 95 
String getFile() Gets filename from the URL 
int getHeaderField(int n) Gets header field value looking up by index 
String getHeaderField(String name) Gets header field value looking up by name 
long getHeaderFieldDate(String 
name, long def) 
Gets named field as a long (representing the 
date) 
int getHeaderFieldInt(String name, int 
def) 
Gets named field as an integer 
String getHeaderFieldKey(int n) Gets header field key using index 
String getHost() Gets host from the URL 
long getLastModified() Gets last-modified field value 
String getPort() Gets port from the URL 
String getProtocol() Gets protocol from the URL 
String getQuery() 
Gets the query string (only valid with GET 
request) 
String getRef() Gets the reference portion of URL 
String getRequestMethod() 
Gets the current setting of the request 
method (GET, POST or HEAD) 
String getRequestProperty(String key) Gets the current setting of a request 
property 
int getResponseCode() Gets the response code (numeric value) 
String getResponseMessage() Gets the response message (text value) 
String getURL() Gets the entire URL 
void setRequestMethod(String 
method) 
Sets the request method (GET, POST or 
HEAD) 
void setRequestProperty(String key, 
String value) 
Sets a request property (header information) 
 96 
Tài liệu tham khảo them 
[1]. Phuong Lan, Java tap 3, NXB Lao dong Xa hoi, 2006. 
[2]. Nguyen Thi Bich Nga, Nen tang cong nghe J2Me & MIDP, NXB Giao thong Van 
tai, 2006. 
[3]. Nguyen Huu Mai, Tổng quan ve J2ME, javavietnam.org, 2004. 
[4]. Le Ngoc Quoc Khanh, Phat trien ung dung J2ME va J2ME Wireless Toolkit, 
2004. 
[5]. John W. Muchow, Core J2METM Technology & MIDP, Prentice Hall PTR 
publisher, 2001. 
[6]. Kim Topley, J2Me in a Nutshell, O'Reilly publisher, 2002. 
[7]. Gwenael Le Bodic, Mobile Messaging Technologies and Service, John Wiley & Sons 
publisher, 2003. 

File đính kèm:

  • pdfGiáo trình Java và công nghệ J2ME.pdf
Tài liệu liên quan