Giáo trình Công nghệ Java

Mục đích

Nội dung tập trung trình bày các vấn đề chính về ngôn ngữ lập trình Java:

 Lịch sử ra đời và phát triển của Java

 Kiến trúc tổng quát một chương trình xây dựng trên Java

 Các đặc điểm của Java, khái niệm máy ảo.

 Cấu trúc một chương trình Java đơn giản, cách xây dựng, dịch, thực thi một chương

trình Java.

1.1. Lịch sử ra đời và phát triển của Java

Năm 1991, một nhóm kỹ sư của Sun Microsystems muốn lập trình điều khiển

các thiết bị điện tử như tivi, máy giặt Ban đầu, định dùng C và C++ nhưng trình biên

dịch C/C++ phụ thuộc vào từng loại CPU. Do đó, họ đã bắt tay vào xây dựng một ngôn

ngữ chạy nhanh, gọn, hiệu quả, độc lập thiết bị và ngôn ngữ “Oak” ra đời vào năm

1995, tương tự như C++ nhưng loại bỏ một số tính năng nguy hiểm của C++ và có khả

năng chạy trên nhiều nền phần cứng khác nhau. Cùng lúc đó world wide web bắt đầu

phát triển và Sun thấy được tiềm năng của ngôn ngữ Oak nên đã đầu tư cải tiến và phát

triển.

Ngôn ngữ lập trình Java được Sun Microsystems giới thiệu vào tháng 6 năm

1995 và nhanh chóng trở thành một ngôn ngữ lập trình của các lập trình viên chuyên

nghiệp. Java được xây dựng dựa trên nền tảng của C và C++, Java sử dụng cú pháp của

C và đặc trưng hướng đối tượng của C++. Java là ngôn ngữ vừa biên dịch vừa thông

dịch. Đầu tiên mã nguồn được biên dịch thành dạng bytecode. Sau đó được thực thi trên

từng loại máy nhờ trình thông dịch. Mục tiêu của các nhà thiết kế Java là cho phép

người lập trình viết chương trình một lần nhưng có thể chạy trên các nền phần cứng

khác nhau.

Ngày nay, Java được sử dụng rộng rãi, không chỉ để viết ứng dụng trên máy cục

bộ hay trên mạng mà còn để xây dựng các trình điều khiển thiết bị di động, PDA,

1.2. Đặc trưng ngôn ngữ Java

Tính đơn giản

Ngôn ngữ lập trình Java loại bỏ các đặc trưng phức tạp của C và C++ như: Loại

bỏ thao tác con trỏ, thao tác định nghĩa chồng toán tử (operator overloading) , không

cho phép đa kế thừa (Multi-inheritance) mà sử dụng giao diện (interface), không sử

dụng lệnh “goto” cũng như file header (.h), loại bỏ cấu trúc “struct” và “union”.

Tính hướng đối tượng

Hướng đối tượng trong Java tương tự như C++ nhưng Java là một ngôn ngữ lập

trình hướng đối tượng hoàn toàn. Tất cả mọi thứ đề cập đến trong Java đều liên quan

đến các đối tượng được định nghĩa trước, thậm chí hàm chính của một chương trình viết11

bằng Java (hàm main) cũng phải đặt bên trong một lớp. Hướng đối tượng trong Java

không có tính đa kế thừa (multi inheritance) như trong C++ thay vào đó Java đưa ra

khái niệm interface hỗ trợ tính đa kế thừa.

Tính độc lập với phần cứng và hệ điều hành

Tính độc lập với phần cứng được hiểu theo nghĩa một chương trình Java, nếu

chạy đúng trên phần cứng của một họ máy nào đó thì cũng chạy đúng trên tất cả các họ

máy khác. Một chương trình chỉ chạy đúng trên một số họ máy cụ thể được gọi là phụ

thuộc vào phần cứng.

Tính độc lập với hệ điều hành được hiểu theo nghĩa một chương trình Java có thể

chạy được trên tất cả các hệ điều hành. Một chương trình chỉ chạy được trên một số hệ

điều hành được gọi là phụ thuộc hệ điều hành.

Các chương trình viết bằng Java có thể chạy trên hầu hết các hệ nền mà không

cần phải thay đổi gì, những người lập trình đặt cho nó một khẩu hiệu ‘viết một lần, chạy

mọi nơi’, điều này là không thể có với các ngôn ngữ lập trình khác.

Giáo trình Công nghệ Java trang 1

Trang 1

Giáo trình Công nghệ Java trang 2

Trang 2

Giáo trình Công nghệ Java trang 3

Trang 3

Giáo trình Công nghệ Java trang 4

Trang 4

Giáo trình Công nghệ Java trang 5

Trang 5

Giáo trình Công nghệ Java trang 6

Trang 6

Giáo trình Công nghệ Java trang 7

Trang 7

Giáo trình Công nghệ Java trang 8

Trang 8

Giáo trình Công nghệ Java trang 9

Trang 9

Giáo trình Công nghệ Java trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 226 trang xuanhieu 9440
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Công nghệ Java", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Công nghệ Java

Giáo trình Công nghệ Java
); 
} catch (Exception ex) { 
view.showMessage(ex.getStackT race().toString()); 
} 
return result; 
} 
} 
ClientRun.java 
package udp.client; 
public class ClientRun { 
public static void main(String[] args) { 
ClientView view = new ClientView(); 
ClientControl control = new ClientControl(view); view.setVisible(true); 
} 
} 
 Các lớp phía server 
package udp.server; 
public class ServerView { public ServerView(){ 
} 
public void showMessage(String msg){ System.out.println(msg); 
} 
} 
ServerControl.java 
package udp.server; 
import java.io.ByteArrayInputStream; 
import j ava.io.ByteArrayOutputStream; 
 214 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; import java.net.DatagramPacket; 
import java.net.DatagramSocket; import java.net.InetAddress; 
import java.sql.Connection; 
import java.sql.DriverManager; import java.sql.ResultSet; 
import java.sql.Statement; import udp.client.User; 
public class ServerControl { 
private ServerView view; 
private Connection con; 
private DatagramSocket myServer; 
private int serverPort = 5555; 
private DatagramPacket receivePacket = null; 
public ServerControl(ServerView view){ 
this.view = view; 
getDBConnection("usermanagement", "root", "12345678"); 
openServer(serverPort); 
view.showMessage("UDP server is running..."); 
while(true){ 
listenning(); 
} 
} 
private void getDBConnection(String dbName, 
String username, String password) 
{ String dbUrl = "jdbc:mysql://localhost:3306/" + dbName; 
String dbClass = "com.mysql.jdbc.Driver"; 
try { 
Class.forName(dbClass); 
con = DriverManager.getConnection (dbUrl, username, password); } 
catch(Exception e) { 
view.showMessage(e.getStackTrace().toString()); 
} 
} 
 215 
private void openServer(int portNumber){ 
try { 
myServer = new DatagramSocket(portNumber); 
}catch(IOException e) { 
view.showMessage(e.toString()); 
} 
} 
private void listenning(){ 
User user = receiveData(); 
String result = "false"; 
if(checkUser(user)) 
{ result = "ok"; 
} 
sendData(result); 
} 
private void sendData(String result){ 
 try { 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(result); 
oos.flush(); 
InetAddress IPAddress = receivePacket.getAddress(); 
int clientPort = receivePacket.getPort(); 
 byte[] sendData = baos.toByteArray(); 
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, 
IPAddress, clientPort); 
myServer.send(sendPacket); 
} catch (Exception ex) { 
view.showMessage(ex.getStackT race().toString()); 
} 
} 
private User receiveData(){ 
User user = null; 
 216 
try { 
byte[] receiveData = new byte[1024]; 
receivePacket = 
new DatagramPacket(receiveData, receiveData.length); 
myServer.receive(receivePacket); 
ByteArrayInputStream bais = new ByteArrayInputStream(receiveData); 
ObjectInputStream ois = new ObjectInputStream(bais); 
 user = (User)ois.readObjjctQ; 
} catch (Exception ex) { 
view.showMessage(ex.getStackT race().toString()); 
} 
return user; 
} 
 private boolean checkUser(User user) { 
String query = "Select * FROM users WHERE username ='" 
+ user.getUserName()+ "' AND password ='" + user.getPassword() + "'"; 
try { 
Statement stmt = con.createStatement(); 
ResultSet rs = stmt.executeQuery(query); 
if (rs.next()) { 
return true; 
} 
}catch(Exception e) { 
view.showMessage(e.getStackTrace().toString()); 
} 
return false; 
} 
} 
ServerRun.java 
package udp.server; 
public class ServerRun { 
public static void main(String[] args) { 
 217 
ServerView view = new ServerView(); 
ServerControl control = new ServerControl(view); 
} 
Kết quả 
Login thành công: 
Login lỗi: 
7.5. Lấy dữ liệu web 
7.5.1. URL và URI 
7.5.2. Sử dụng URLConnection để truy xuất dữ liệu 
7.6. Gửi Email 
 Gửi mail trong java sử dụng JavaMail. Đây là một nền tảng và giao thức độc lập 
được sử dụng để gửi, nhận và đọc mail thông qua ứng dụng Java. Sử dụng JavaMail 
API này để tạo ra những ứng dụng Java có tính năng hỗ trợ gửi email cho người dùng. 
Ví dụ sau khi đăng ký thành công một tài khoản, ứng dụng sẽ gửi email thông báo đên 
người dùng,  Hình bên dưới là một minh hoạ về sử dụng JavaMail. 
 218 
 Hình 7.6. Minh hoạ sử dụng JavaMail 
7.6.1.1. Mô tả các giao thức mail khác nhau 
 Hiện nay có 3 giao thức cơ bản được ứng dụng trong mail server giúp hệ thống 
có thể hoạt động trơn tru và đảm bảo khả năng bảo mật cao nhất, bao gồm: 
 - SMTP – Simple Mail Transfer Porotocol: SMTP được sử dụng khi gửi từ một 
ứng dụng email như Postfix với một máy chủ email hoặc khi email được gửi từ một 
máy chủ email khác. Giao thức này sử dụng cổng TCP 25. 
 - POP3 – Post Office Porotocol version 3: giao thức này được dùng để tải một 
email từ một máy chủ email. POP3 sử dụng cổng TCP 110. 
 - IMAP – Internet Message Access Protocol: Đây là giao thức thế hệ mới của 
POP. IMAP sử dụng cổng TCP 143 và đặt sự kiểm soát email trên mail server. IMAP 
có thể hoạt động ở 3 chế độ: trực tuyến, ngoại tuyến và ngắt kết nối. Chế độ ngoại 
tuyến được thực hiện như sau: khi các email đã được chuyển tới máy client, nó sẽ bị 
xóa khỏa mail server và sau đó hệ thống bị ngắt. Lúc này người dùng có thể đọc, trả 
lời và làm một số việc khác ở chế độ ngoại tuyến. Tuy nhiên nếu họ muốn gửi thư, họ 
phải kết nối lại. Như vậy ở trong chế độ này, thông điệp được lưu tạm ở client server 
giúp người dùng có thể sử dụng bình thường và ở lần kết nối kế tiếp nó sẽ được cập 
nhập trở lại vào mail server. 
 Hình 7.7. Các giao thức mail 
 219 
7.6.2. Khái niệm Session 
 Lớp Session mô tả một mail session và không có các lớp phụ, Nó thu thập các 
thuộc tính và giá trị mặc định được sử dụng bới mail API. Một phiên mặc định có thể 
được chia sẻ bởi nhiều ứng dụng trên desktop. Các session không chia sẻ cũng có thể 
được tạo ra. Lớp Session cung cấp quyền truy cập tới các nhà cũng cấp thực hiện 
Store, Transport và các lớp liên quan.Các giao thức cung cấp cấp hình bằng cách sử 
dụng các tệp: 
 javamail.providers and javamail.default.providers 
 javamail.address.map and javamail.default.address.map 
7.6.3. Cách tạo message 
 Tạo một đối tượng MimeMessage với một số thiết lập cơ bản như: Người gửi 
(from), người nhận (to), chủ đề (subject) và nội dung (body) 
Message msg = new MimeMessage(s); 
msg.setFrom(new InternetAddress(from)); 
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); 
msg.setSubject(subject); 
msg.setText(body); 
7.6.4. Các bước để tạo và gửi message 
Bước 1. Tạo đối tượng Properties và chỉ định thông tin host, post 
Properties p = new Properties(); 
p.put("mail.smtp.auth", "true"); 
p.put("mail.smtp.starttls.enable", "true"); 
p.put("mail.smtp.host", "smtp.gmail.com"); 
p.put("mail.smtp.port", 587); 
Bước 2. Tạo đối tượng session 
Session s = Session.getInstance(p, 
 new javax.mail.Authenticator() { 
 protected PasswordAuthentication getPasswordAuthentication() { 
 return new PasswordAuthentication(accountName, accountPassword); 
 } 
}); 
Trong đó accountName và accountPassword là tài khoản gmail. 
Bước 3. Tạo đối tượng message 
 220 
Message msg = new MimeMessage(s); 
msg.setFrom(new InternetAddress(from)); 
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); 
msg.setSubject(subject); 
msg.setText(body); 
Bước 4. Gửi mail 
Transport.send(msg); 
7.6.5. Các bước cần thiết để đọc một message 
Bước 1. Tạo đối tượng Properties và chỉ định thông tin host, post 
Properties p = new Properties(); 
p.put("mail.smtp.auth", "true"); 
p.put("mail.smtp.starttls.enable", "true"); 
p.put("mail.smtp.host", "smtp.gmail.com"); 
p.put("mail.smtp.port", 587); 
Bước 2. Tạo Authentication 
javax.mail.Authenticator pa = null; //default: no authentication 
if (username != null && password != null) { 
props.put(“mail.smtp.auth”, “true”); 
pa = new javax.mail.Authenticator (){ 
public PasswordAuthentication getPasswordAuthentication() { 
return new PasswordAuthentication(username, password); 
} 
}; 
}//else: no authentication 
Bước 3.Kết nối tới POP3 server 
Session session = Session.getDefaultInstance(props, pa); 
Store store = session.getStore(provider); 
store.connect(host, username, password); 
Bước 4. Đọc mail 
Folder inbox = store.getFolder(“INBOX”); 
// 
 221 
inbox.open(Folder.READ_ONLY); 
// 
Message[] messages = inbox.getMessages(); 
7.6.6. Các bước cần thiết để trả lời một email 
Bước 1. Đọc email như các bước ở trên 
Bước 2. Chọn email để trả lời 
Message[] messages = folder.getMessages(); 
for (int i = 0, n = messages.length; i < n; i++) { 
Message message = messages[i]; 
} 
Bước 3. Tạo đối tượng message 
Message replyMessage = new MimeMessage(session); 
replyMessage = (MimeMessage) message.reply(false); 
replyMessage.setFrom(new InternetAddress(to)); 
replyMessage.setText("Thanks"); 
replyMessage.setReplyTo(message.getReplyTo()); 
Bước 4. Gửi mail 
Transport t = session.getTransport("smtp"); 
t.sendMessage(replyMessage, replyMessage.getAllRecipients()); 
 222 
CÂU HỎI ÔN TẬP, THẢO LUẬN 
Câu 1. Mỗi đối tượng trong lớp InetAddress chứa mấy thành phần chính? Lớp kế thừa 
từ lớp InetAddress gồm những lớp nào? 
Câu 2. Phương thức sau trả về kết quả gì: 
InetAddress[] addresses = InetAddress.getAllByName(String name) 
throws UnknownHostException 
Câu 3. Chương trình sau cho kết quả gì? 
import java.net.*; 
public class MyAddress { 
public static void main(String[] args) { try { 
InetAddress me = InetAddress.getLocalHost( ); 
String dottedQuad = me.getHostAddress( ); 
System.out.println("My address is " + dottedQuad); 
 catch (UnknownHostException ex) { 
System.out.println("I'm sorry. I don't know my own address."); 
} 
} 
} 
Câu 4. Chương trình sau cho kết quả gì? 
import java.net.*; 
public class AddressTests { 
public static int getVersion(InetAddress ia) 
 { byte[] address = ia.getAddress( ); 
if (address.length == 4) return 4; 
 else if (address.length == 6) return 6; 
else return -1; 
} 
Câu 5. Liệt kê tóm tắt một số lớp Java hỗ trợ lập trình với TCPSocket. Giái thích tác 
dụng của các lớp. 
Câu 6. Trình bày kỹ thuật lập trình truyền thông với giao thức TCP? 
Câu 7. Tóm tắt Một số lớp Java hỗ trợ lập trình với UDPSocket. Giải thích tác dụng 
của các lớp đó. 
 223 
 Câu 8. Trình bày kỹ thuật lập trình truyền thông với giao thức UDP. So sánh với giao 
thức TCP? 
BÀI TẬP ỨNG DỤNG 
Bài 1. Viết chương trình nhận đối số là một URL. Nối kết đến Web Server trong URL 
nhận được, lấy trang web về và in ra màn hình theo dạng textfile (html). 
Bài 2. Viết chương trình gửi đến URL một chuỗi, mở kết nối từ URL này và hiển 
thông tin header. 
Chức năng chương trình: 
- Mở kết nối đến địa chỉ URL 
- Hiển thị thông tin các header nhận được 
Bài 3. Viết chương trình in ra địa chỉ của localhost (địa chỉ cục bộ), null host và địa 
chỉ bất kì trên internet. 
Bài 4. Viết chương trình đọc file từ xa thông qua web server. 
Bài 5. Viết chương trình download file thông qua web server. 
Bài 6.Viết chương trình cộng hai số nguyên 
 - Client: Nhập vào từ bàn phím 2 số nguyên (a,b). Client chờ nhận kết quả từ Server 
để in ra màn hình. 
 - Server: Nhận 2 số nguyên mà Client vừa gửi, tính tổng, tích, thương của chúng và 
gửi kết quả cho Client. 
Bài 7. Viết chương trình kiểm tra số 
-Client: Nhập vào một số.Client chờ nhận kết quả từ Server để in ra màn hình. 
-Server:Nhận số mà Client vừa gửi, Server tiến hành kiểm tra số đó có là nguyên tố, số 
hoàn hảo hay không và gửi lại cho Client. 
Bài 8. Viết chương trình 
-Client: Nhập vào một mảng số nguyên . Client chờ nhận kết quả từ Server để in ra 
màn hình. 
-Server: Nhận mảng mà Client vừa gửi, Server tiến hành tìm các số chẵn và gửi lại cho 
Client. 
Bài 9. Xây dựng một mô hình ứng dụng khách/chủ (client/server) sử dụng lớp Socket 
và ServerSocket để kết nối và trao đổi thông tin giữ máy khách và máy chủ. Máy 
khách (client) sẽ gửi một chuỗi đến máy chủ (server), máy chủ sẽ chuẩn hóa và đảo 
ngược thứ tự của chuỗi và gửi trả về cho máy khách. 
Bài 10. Tạo ra hai ứng dụng độc lập (một client và một server). Client chấp nhận một 
trong các số sau: 1, 2, 3. Số này sẽ được gửi đến server. Server sẽ trả lại tương ứng : 
“ONE” hoặc “TWO” hoặc “THREE” (tùy theo số nhận được). Dùng giao thức TCP/IP 
 224 
Chức năng chương trình: 
- Client gửi số bất kì đến SERVER 
- Nếu là số 1,2,3 thì trả về ONE,TWO,THREE, các trường hợp còn lại trả về 
UNKNOWN. 
Bài 11. Viết chương trình Talk theo chế độ không nối kết. Cho phép hai người ngồi 
trên hai máy tính có thể tán gẫu (chat) với nhau. 
Bài 12. Xây dựng chương trình ExchangeRateServer 
 ExchangeRateServer chạy trên máy chủ và đón nhận những dữ liệu do máy khách gửi 
đến cổng 2345. Khi nhận được yêu cầu máy chủ sẽ gửi trả các thông báo về tỉ giá kèm 
theo ngày giờ mới nhất về cho máy khách. Ta sử dụng hàm random của lớp Math để 
lấy về tỷ giá mang tính chất ngẫu nhiên của 3 thị trường là Tokyo, NewYork và 
HongKong. Dữ liệu được nhận và gửi theo từng gói dựa vào lớp DatagramPackage 
Chương trình chạy trên máy chủ cung cấp tỷ giá của các thị trường chứng khoán. 
Bài 13. Xây dựng chương trình multicast theo mẫu bên dưới . Chức năng chương 
trình: 
- Tham gia vào group của multicast 
- Gửi dữ liệu đến địa chỉ multicast 
- Nhận dữ liệu từ multicast 
- Hiển thị lên màn hình 
- Chỉ cần các client tham gia vào group của địa chỉ multicast này thì khi có dữ liệu 
được gửi vào đó thì tất cả client đều nhận được 
Cơ chế: 
- Tham gia vào group của địa chỉ multicast 
- Gửi dữ liệu đến địa chỉ multicast (Lúc này các client muốn nhận được thì 
phải tham gia vào group của multicast đó thì mới nhận được) 
- Vì trong chương trình cũng tham gia vào group multicast nên nó cũng sẽ 
nhận được dữ liệu khi có client gửi vào địa chỉ này 
Bài 14. Viết Chương trình multicast video bằng Java. 
Bài 15. Viết chương trình gửi nhận mail bằng java 
Bài 16. Viết chương trình chat đa người dùng bằng Java 
 225 
TÀI LIỆU THAM KHẢO 
[1] Cay S. Horstmann – Gary Cornell. Core Java Volum 1 - Fundamentals, Eighth 
Edition. The Sun Microsystems press. 2008 
[2] Cay S. Horstmann – Gary Cornell. Core Java Volum 2 – Advanced Features, 
Eighth Edition. The Sun Microsystems press. 2008 
[3] Joyce Farrell. Java Programming Introductory. Course Technology © 1999 
[4] Bruce Eckel. Thinking in Java, Fourth Edition. Prentice Hall – 2006 
[5] Herbert Schildt. Java 2. A Beginner’s Guide. Second Edition. McGraw-Hill - 
2003. 
[6] Dr. Harvey M. Deitel - Paul J. Deitel. Java How to Program, 4th (Deitel). 
Prentice Hall - 2002 
[7] Simon Roberts – Philip Heller – Michael Ernest. Complete Java 2 Certification – 
study guide. BPB Publications – 2000. 
[8]  
[9]  
[10] Đoàn Văn Ban, Lập trình hướng đối tượng với JAVA, nhà xuất bản Khoa học và 
Kỹ thuật 2005. 
 226 

File đính kèm:

  • pdfgiao_trinh_cong_nghe_java.pdf