Giáo trình Lập trình mạng với ngôn ngữ Java (Phần 1)

1. Mạng máy tính

Mạng máy tính Là tập hợp các máy tính hoặc các thiết bị được nối với nhau bởi

các đường truyền vật lý và theo một kiến trúc nào đó.

Chúng ta có thể phân loại mạng theo qui mô của nó:

 Mạng LAN (Local Area Network)-mạng cục bộ: kết nối các nút trên một phạm vi

giới hạn. Phạm vi này có thể là một công ty, hay một tòa nhà.

 Mạng WAN (Wide Area Network): nhiều mạng LAN kết nối với nhau tạo thành

mạng WAN.

 MAN (Metropolitan Area Network), tương tự như WAN, nó cũng kết nối nhiều

mạng LAN. Tuy nhiên, một mạng MAN có phạm vi là một thành phố hay một đô thị

nhỏ. MAN sử dụng các mạng tốc độ cao để kết nối các mạng LAN của trường

học, chính phủ, công ty, ., bằng cách sử dụng các liên kết nhanh tới từng điểm

như cáp quang.

Khi nói đến các mạng máy tính, người ta thường đề cập tới mạng xương sống

(backbone). Backbone là một mạng tốc độ cao kết nối các mạng có tốc độ thấp hơn. Một

công ty sử dụng mạng backbone để kết nối các mạng LAN có tốc độ thấp hơn. Mạng

backbone Internet được xây dựng bởi các mạng tốc độ cao kết nối các mạng tốc độ cao.

Nhà cung cấp Internet hoặc kết nối trực tiếp với mạng backbone Internet, hoặc một nhà

cung cấp lớn hơn.

1.1. Các đường kết nối trong mạng WAN

Để kết nối tới một mạng WAN, có một số tùy chọn như sau:

 Khi một khách hàng cụ thể yêu cầu sử dụng mạng với thông lượng xác định,

chúng ta có thể sử dụng các đường thuê bao (leased line).

 Các đường chuyển mạch (switched lines) được sử dụng bởi dịch vụ điện thoại

thông thường. Một mạch được thiết lập giữa phía nhận và phát trong khoảng thời

gian thực hiện cuộc gọi hoặc trao đổi dữ liệu. Khi không còn cần dùng đường

truyền nữa, thì cần phải giải phóng đường truyền cho khách hàng khác sử dụng.

Các ví dụ về các đường chuyển mạch là các đường POTS , ISDN, và DSL.

 Mạng chuyển mạch gói là mạng mà trong đó nhà cung cấp dịch vụ cung cấp công

nghệ chuyển mạch để giao tiếp với mạng xương sống. Giải pháp này cung cấp

hiệu năng cao và khả năng chia sẻ tài nguyên giữa các khách hàng.

Các giao thức được sử dụng cho các mạng chuyển mạch bao gồm X.25

(64Kbps), Frame Relay (44.736Mbps), và ATM (9.953 Gbps).

Kiến trúc mạng: Một trong những vấn đề cần quan tâm đối với một mạng máy tính

là kiến trúc mạng. Nó cập tới hai khía cạnh là Hình trạng mạng và Giao thức

mạng.

 Hình trạng mạng: Là cách nối các máy tính với nhau. Người ta phân loại mạng

theo hình trạng mạng như mạng sao, mạng bus, mạng ring

 Giao thức mạng: Là tập hợp các qui tắc, qui ước truyền thông của mạng mà tất cả

các thực thể tham gia truyền thông phải tuân theo.Sưu tầm bởi: www.daihoc.com.vn

2

1.2. Giao thức Ethernet

Để có được sự hiểu biết tốt hơn về các mạng vật lý hoạt động như thế nào, chúng

ta sẽ xem xét một số giao thức LAN phổ biến: giao thức Ethernet. Chín mươi phần trăm

các thiết bị gắn với một mạng LAN sử dụng giao thức Ethernet, ban đầu được phát triển

bởi Xerox, Digital Equipement, và Intel năm 1972.

Ngày nay, Ethernet có thể hỗ trợ các đường truyền 100Mbps và 1Gbps. Rất nhiều

công nghệ đường truyền có thể được sử dụng với một Ethernet. Người ta sử dụng một

số qui ước để đặt tên giao thức Enternet. Tên này chỉ ra tốc độ của mạng Ethernet và các

thuộc tính của công nghệ đường truyền. Các tên như vậy được bắt đầu bằng một số để

chỉ ra tốc độ truyền tối đa, tiếp theo là một từ được sử dụng để xác định công nghệ truyền

dẫn, và cuối cùng là một số để chỉ ra khoảng cách giữa hai nút. Ví dụ, 10Base2 ký hiệu

một Ethernet hoạt động với tốc độ 10Mbps sử dụng kỹ thuật truyền trên băng tần cơ sở,

với các cáp có chiều dài tối đa là 200m. Một số cấu hình thông dụng khác như sau:

pdf 129 trang yennguyen 3700
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình mạng với ngôn ngữ Java (Phần 1)", để 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 Lập trình mạng với ngôn ngữ Java (Phần 1)

Giáo trình Lập trình mạng với ngôn ngữ Java (Phần 1)
Sưu tầm bởi: www.daihoc.com.vn 
Lời mở đầu 
Lập trình mạng là một trong những nhiệm vụ căn bản để phát triển các ứng dụng 
doanh nghiệp. Một chương trình mạng được viết ra để các chương trình trên các máy 
tính khác nhau có thể truyền tin với nhau một cách hiệu quả và an toàn cho dù chúng 
được cài đặt trên mạng LAN, WAN hay mạng toàn cầu Internet, đây là điều căn bản đối 
với sự thành công của nhiều hệ thống. 
Java là ngôn ngữ lập trình hướng đối tượng thuần túy với nhiều đặc trưng ưu việt 
so với các ngôn ngữ lập trình hướng đối tượng khác như tính độc lập với nên, tính bảo 
mật,Java là ngôn ngữ ngay từ khi ra đời đã hướng đến lập trình mạng nên việc viết một 
chương trình lập trình mạng bằng Java dễ dàng hơn nhiều so với các ngôn ngữ khác. 
Giáo trình này bao gồm 10 chương: 
Chương 1: Giới thiệu những khái niệm căn bản về mạng máy tính để người đọc có 
thể tiếp cận với các chương tiếp theo. Trong chương này chúng ta sẽ đi vào xem xét 
mạng vật lý, phần cứng được sử dụng trong các mạng LAN. Tiếp theo chúng ta sẽ tìm 
hiểu mô hình phân tầng OSI bảy tầng, và sự tương ứng của họ giao thức TCP/IP với các 
tầng trong mô hình OSI. Sau đó chúng ta sẽ đi vào tìm hiểu các giao thức mạng, giao 
thức Internet, và giao thức e-mail. 
Chương 2: Giới thiệu ngôn ngữ lập trình Java. Chương này trình bày các khái niệm 
căn bản về ngôn ngữ lập trình Java. Giới thiệu lịch sử phát triển và cấu trúc của máy ảo 
Java. Những đặc trưng đã tạo nên sức mạnh của ngôn ngữ Java cũng được giới thiệu 
trong chương này. Cũng trong chương này chúng ta sẽ đi vào tìm hiểu cách cấu hình và 
cài đặt môi trường biên dịch, chạy và soạn thảo ngôn ngữ Java. Tiếp đến ta sẽ đi vào tìm 
hiểu các thành phần cơ bản của Java như kiểu dữ liệu, cấu trúc lệnh tuần tự rẽ nhánh, 
lặp, và nhảy. Tiếp theo chúng ta sẽ đi vào tìm hiểu các khái niệm liên quan đến lập trình 
hướng đối tượng trong Java như lớp, phương thức, thuộc tính, các từ khóa bổ trợ như 
static, final, abstract, thừa kế và tính đa hình trong Java. Một trong những khái niệm mới 
mà các ngôn ngữ truyền thống trước đây không có là ngoại lệ và đón bắt ngoại lệ trong 
Java cũng được giới thiệu. 
Chương 3: Các luồng vào ra. Chương này giới thiệu khái niệm vào ra bằng các 
luồng dữ liệu. Trước tiên ta sẽ tìm hiểu về các luồng và ý nghĩa của luồng trong chương 
trình Java. Tiếp đến chúng ta sẽ lần lượt tìm hiểu các luồng vào ra chuẩn trong gói làm 
việc với console. Các luồng trừu tượng java.io.InputStream, java.io.OutputStream là các 
luồng cơ bản để từ đó xây dựng nên các luồng cụ thể. Luồng được chia thành các nhóm 
như luồng byte và luồng ký tự. Từ phiên bản Java 1.4 một đặc trưng vào ra mới trong 
Java được đưa vào cũng được giới thiệu trong chương này. Việc nắm vững kiến thức ở 
chương này cũng giúp cho việc lập trình ứng dụng mạng trở nên đơn giản hơn vì thực 
chất của việc truyền và nhận dữ liệu giữa các ứng dụng mạng là việc đọc và ghi các 
luồng. 
Chương 4: Lập trình đa tuyến đoạn. Trong các ngôn ngữ lập trình trước đây các 
ứng dụng hầu hết là các ứng dụng đơn tuyến đoạn. Để tăng tốc độ xử lý và giải quyết vấn 
đề tương tranh của các ứng dụng nói chung và ứng dụng mạng nói riêng ta cần sử dụng 
khái niệm đa tuyến đoạn. Phần đầu của chương này trình bày các khái niệm căn bản về 
tiến trình, tuyến đoạn. Tiếp đến chúng ta sẽ xem xét các cách cài đặt một ứng dụng tuyến 
đoạn trong Java bằng lớp Thread và thực thi giao tiếp Runnable. Sau đó ta sẽ đi vào tìm 
hiểu các phương thức của lớp Thread. Sự đồng bộ hóa và cách cài đặt một chương trình 
đồng bộ hóa cũng được giới thiệu trong chương này. 
Chương 5: Lập trình mạng với các lớp InetAddress, URL và URLConnection. Lớp 
InetAddress là lớp căn bản đầu tiên trong lập trình mạng mà ta cần tìm hiểu. Nó chỉ ra 
cách một chương trình Java tương tác với hệ thống tên miền. Tiếp đến ta sẽ đi vào tìm 
hiểu các khái niệm về URI, URL,URN và lớp biểu diễn URL trong Java. Cách sử dụng 
URL để tải về thông tin và tệp tin từ các server. Sau đó ta đi vào tìm hiểu lớp 
URLConnection, lớp này đóng vai trò như một động cơ cho lớp URL. 
Sưu tầm bởi: www.daihoc.com.vn 
Chương 6: Lập trình Socket cho giao thức TCP. Trong chương này chúng ta sẽ tìm 
hiểu cách lập trình cho mô hình client/server và các kiểu kiến trúc client/server. Các lớp 
Socket và ServerSocket được trình bày chi tiết trong chương này để lập các chương trình 
cho giao thức TCP. 
Chương 7: Lập trình ứng dụng cho giao thức UDP. Chương này giới thiệu giao 
thức UDP và các đặc trưng của giao thức này. Tiếp đến ta đi vào tìm hiểu các lớp 
DatagramPacket và DatagramSocket để viết các chương trình ứng dụng mạng cho giao 
thức UDP. 
Chương 8: Tuần tự hóa đối tượng và ứng dụng trong lập trình mạng. Trình bày các 
vấn đề về tuần tự hóa và ứng dụng của tuần tự hóa trong lập trình mạng. 
Chương 9: Phân tán đối tượng bằng Java RMI. Chương này tìm hiểu chủ đề về lập 
trình phân tán đối tượng bằng kỹ thuật gọi phương thức RMI (Remote Method 
Invocation). 
Chương 10:Xử lý cơ sở dữ liệu trong Java. Trình bày cách thức kết nối các cơ sở 
dữ liệu và xử lý cơ sở dữ liệu bằng Java thông qua giao diện lập trình ứng dụng JDBC. 
Tìm hiểu về lập trình mạng tốt nhất là trên các hệ thống mạng thực sự với nhiều 
máy tính được kết nối vật lý. Tuy nhiên trong giáo trình này hầu hết các ví dụ được trình 
bày để bạn đọc có thể lập trình và thử nghiệm các ứng dụng mạng trên các máy đơn. 
Mặc dù đã hết sức cố gắng để trình bày giáo trình một cách dễ hiểu với các ví dụ 
minh họa giúp bạn đọc có thể thử nghiệm ngay sau khi tìm hiểu các vấn đề lý thuyết, 
nhưng chắc chắn giáo trình này không thể tránh khỏi những thiếu sót nhất định. Rất mong 
sự góp ý và phê bình của các bạn độc giả. Mọi thắc mắc và góp ý các bạn có thể gửi về 
theo địa chỉ e-mail sau:lequocdinh@vnn.vn hoặc hoan_td2001@yahoo.com 
Để hoàn thành giáo trình này các tác giả đã nhận được sự giúp đỡ rất nhiều từ 
bạn bè, đồng nghiệp và những người thân. 
Xin chân thành cảm ơn tới tất cả mọi người. 
Nhóm tác giả 
Sưu tầm bởi: www.daihoc.com.vn 
 I
MỤC LỤC 
Lời mở đầu 
Chương 1:Các khái niệm căn bản về mạng và giao thức .............................................. 1 
1. Mạng máy tính .................................................................................................... 1 
1.1. Các đường WAN ............................................................................. 1 
1.2 .Giao thức Ethernet .......................................................................... 2 
1.3. Các thành phần vật lý ...................................................................... 3 
2. Mô hình phân tầng .............................................................................................. 6 
2.1. Tầng 1:Tầng vật lý........................................................................... 7 
2.2. Tầng 2: Tầng liên kết dữ liệu ........................................................... 7 
2.3. Tầng 3: Tầng mạng ......................................................................... 7 
2.4. Tầng 4:Tầng giao vận ..................................................................... 7 
2.5. Tầng 5: Tầng phiên ........................................................................... 
2.6. Tầng 6:Tầng trình diễn .................................................................... 7 
2.7. Tầng 7:Tầng ứng dụng .................................................................... 7 
3. Các giao thức mạng ............................................................................................ 8 
3.1. Các giao thức cơ bản ...................................................................... 8 
3.2. Các giao thức Internet ................................................................... 14 
4. Soket ................................................................................................................. 17 
5. Dịch vụ tên miền .............................................................................................. 17 
5.1. Các server tên miền ...................................................................... 18 
5.2. Nslookup ....................................................................................... 19 
6. Internet và Extranet .......................................................................................... 20 
6.1. Intranet và Extranet20 
6.2. Firewall .......................................................................................... 20 
6.3. Proxy Server ................................................................................. 20 
Chương 2 : Giới thiệu ngôn ngữ lập trình Java ........................................................... 21 
1. Giới thiệu công nghệ Java ................................................................................ 21 
1.1. Lịch sử phát triển........................................................................... 21 
1.2. Cấu trúc của máy ảo Java – Java Virtual Machine ........................ 21 
1.3. Các đặc trưng của Java ................................................................ 21 
1.4. Các ấn bản Java ........................................................................... 22 
1.5. Công cụ phát triển ......................................................................... 23 
1.6. Các kiểu ứng dụng trong Java....................................................... 23 
1.7. Cài đặt chương trình dịch Java và các công cụ ............................. 23 
1.8. Một số ví dụ mở đầu ..................................................................... 25 
2. Ngôn ngữ lập trình Java .................................................................................... 27 
2.1. Cấu trúc tệp của một chương trình Java ....................................... 27 
2.2. Định danh, kiểu dữ liệu và khai báo biến ....................................... 28 
2.3. Các kiểu dữ liệu nguyên thủy (primitive datatype) ......................... 28 
2.4. Khai báo các biến .......................................................................... 30 
2.5. Các lệnh trong Java ...................................................................... 31 
2.6 Các lớp và các đối tượng trong Java .............................................. 36 
2.7. Giao tiếp – Interface ...................................................................... 48 
2.8. Các gói và sử dụng gói trong Java ................................................ 50 
2.9. Quản lý ngoại lệ ............................................................................ 52 
Sưu tầm bởi: www.daihoc.com.vn 
 II
Chương 3: Các luồng vào ra ....................................................................................... 59 
1. Khái niệm về luồng trong Java ........................................................................... 59 
1.1. Khái niệm luồng(stream) ............................................................... 59 
2. Luồng xuất nhập chuẩn ..................................................................................... 60 
3. Luồng nhị phân .................................................................................................. 60 
3.1. Lớp InputStream ........................................................................... 60 
3.2. Lớp OutputStream ......................................................................... 61 
3.3. Các luồng xuất nhập mảng byte .................................................... 62 
3.4. Luồng xuất nhập tập tin ................................................................. 64 
3.5. Truy nhập tệp ngẫu nhiên .............................................................. 66 
3.6. Luồng PrintStream ....................................................................... 68 
4. Luồng ký tự ..................................................................................................... 68 
4.1. Sự tương ứng giữa luồng byte và luồng ký tự ............................... 68 
4.2. Mã hóa ký tự ................................................................................. 69 
4.3 Lớp Writer ...................................................................................... 70 
4.4. Lớp Reader ................................................................................... 70 
4.5. Lớp OutputStreamWriter ............................................................... 70 
4.6. Lớp InputStreamReader ................................................................ 71 
4.7. Lớp FileWriter ............................................................................... 71 
4.8. Lớp FileReader ............................................................................. 72 
5. Luồng đệm ........................................................................................................ 73 
6. Luồng vào ra mới – New Input Output ............................................................... 74 
6.1. Căn bản về NIO ............................................................................ 74 
6.2. Buffer (Các vùng đệm) .................................................................. 74 
6.3. Các kênh (Channel) ...................................................................... 76 
6.4. Charset và Selector ....................................................................... 76 
6.5. Đọc tệp .......................................................................................... 77 
6.6. Ghi tệp tin ...................................................................................... 80 
7. Kết luận ................................................................................................................... 82 
Chương 4: Lập trình đa tuyến đoạn ............................................................................ 83 
1.Tổng quan83 
1.1. Lập trình đơn tuyến đoạn .............................................................. 83 
1.2. Lập trình đa tiến trình .................................................................... 83 
1.3. Lập trình đa tuyến đoạn................................................................. 84 
2. Tạo các ứng dụng đa tuyến đoạn với lớp Thread .............................................. 86 
3. Tạo ứng dụng đa tuyến đoạn với giao tiếp Runnable ........................................ 87 
4. Sự đồng bộ hóa ................................................................................................. 88 
4.1. Các phương thức synchronized .................................................... 88 
4.2.Lệnh synchronized ......................................................................... 89 
5. Phương thức wait và notify ................................................................................ 90 
6. Lập lịch cho tuyến đoạn ..................................................................................... 91 
7. Hoài vọng-Deadlock .......................................................................................... 92 
8. Điều khiển tuyến đoạn ....................................................................................... 94 
8.1. Ngắt một tuyến đoạn Thread ......................................................... 94 
8.2 Kế ... ng, tạo ra thông tin MIME cho file, 
và mở một luồng FileInputStream tới file. Phương thức connect() của lớp 
HttpURLConnection tạo ra một đối tượng HttpClient để kết nối với server. Phương 
thức openConnection() của đối tượng URL gọi phương thức connect() tương ứng, 
và trả về liên kết đã được mở. Vì vậy ta hiếm khi cần phải gọi phương thức 
connect() một cách trực tiếp. 
Đọc dữ liệu từ một server 
Dưới đây là các bước tối thiểu cần để tìm kiếm dữ liệu từ một URL bằng cách sử 
dụng đối tượng URLConnection: 
o Bước 1: Xây dựng một đối tượng URL. 
o Bước 2: Gọi phương thức openConnection() của lớp URL để tìm kiếm một 
đối tượng URL Connection cho đối tượng URL đó. 
o Bước 3: Gọi phương thức getInputStream(). 
o Bước 4: Đọc từ luồng nhập bằng cách sử dụng API. 
 public Object getContent() throws IOException 
Phương thức về mặt ảo giác giống như phương thức getContent() của lớp URL. 
Thực tế, phương thức URL.getContent() chỉ việc gọi phương thức getContent() tải về đối 
tượng được chọn bởi URL của URLConnection này. Để phương thức getContent() hoạt 
động, môi trường cần nhận dạng và hiểu kiểu nội dung. Hiện nay chỉ có một số kiểu nội 
dung được hiểu là text/plain, image/gif, và image/jpeg. Bạn có thể cài đặt thêm các kiểu 
trình quản lý nội dung khác có thể hiểu các kiểu nội dung khác. Phương thức 
getContent() chỉ làm việc với các giao thức như HTTP mà có một sự hiểu biết rõ ràng về 
các kiểu nội dung MIME. Nếu kiểu nội dung không được biết trước, hoặc giao thức không 
hiểu các kiểu nội dung, thì ngoại lệ UnknownServicException được đưa ra. 
 public InputStream getInputStream() 
Phương thức getContent() chỉ làm việc khi Java có một trình quản lý nội dung cho 
kiểu nội dung. Nếu không phải trường hợp này, bạn có lẽ sẽ cần một luồng 
InputStream chung, luồng này cho phép bạn tự đọc và phân tích dữ liệu. Để làm 
Sưu tầm bởi: www.daihoc.com.vn 
 112
như vậy, cần gọi phương thức getInputStream(). Phương thức này cũng hữu ích 
khi trình quản lý nội dung có sẵn không thực hiện chính xác cái mà bạn muốn. 
Ví dụ: Tải về một trang web thông qua một URL. 
import java.net.*; 
import java.io.*; 
public class viewsource 
{ 
 public static void main(String[] args) 
 { 
 String thisLine; 
 URL u; 
 URLConnection uc; 
 if(args.length>0) 
 { 
 try{ 
 u =new URL(args[0]); 
 try{ 
 uc=u.openConnection(); 
 DataInputStream theHtml = new 
DataInputStream(uc.getInputStream()); 
 try{ 
 while((thisLine=theHtml.readLine())!=null) 
 { 
 System.out.println(thisLine); 
 } 
 } 
 catch(Exception e) 
 { 
 System.err.println(e); 
 } 
 } 
 catch(Exception e) 
 { 
 System.err.println(e); 
 } 
 } 
 catch(MalformedURLException e) 
 { 
 System.err.println(args[0]+" is not a parseable URL"); 
Sưu tầm bởi: www.daihoc.com.vn 
 113
 System.err.println(e); 
 } 
 } 
 } 
} 
Phương thức openStream() của lớp URL trả về đối tượng InputStream từ đối 
tượng URLConnection. 
 public OutputStream getOutputStream() 
Đôi khi bạn cần phải ghi dữ liệu vào một URLConnection-chẳng hạn khi bạn muốn 
gửi dữ liệu tới một web server sử dụng lệnh POST. Phương thức 
getOutputStream() trả về một luồng OutputStream trên đó bạn có thể ghi dữ liệu để 
truyền tới một server. Vì một URLConnection không cho phép xuất kết quả ra ở chế 
độ mặc định, bạn phải gọi phương thức setDoOutput() trước khi yêu cầu một luồng 
xuất. Mỗi khi bạn có một luồng OutputStream thông thường bạn phải gắn nó với 
luồng DataOutputStream hoặc một lớp con khác của lớp OutputStream mà đưa ra 
nhiều đặc trưng hơn. Ví dụ: 
try{ 
 URL u = new URL(“http:// www.somehost.com/cgi-bin/acgi”); 
 URLConnection uc = u.openConnection(); 
 uc.setDoOutput(true); 
 DataOutputStream dos = new DataOutputStream(uc.getOutputStream()); 
 dos.writeByte(“Herre is some data”); 
} 
catch(Exception e) 
{ 
 System.err.println(e); 
} 
Sự khác biệt giữa URL và URLConnection là: 
 URLConnection cho phép truy xuất tới header HTTP. 
 URLConnection có thể cấu hình các tham số yêu cầu được gửi cho server. 
 URLConnection có thể ghi dữ liệu lên server cũng như đọc dữ liệu từ server. 
3.1. Phân tích Header 
HTTP Server cung cấp một số lượng thông tin đáng kể trong các header MIME 
trước mỗi đáp ứng. Thông tin trong các header MIME có thể bao gồm cơ chế mã hóa nội 
dung được sử dụng, ngày và giờ, chiều dài của nội dung được trả về bằng byte, ngày hết 
hạn của nội dung, ngày mà nội dung được sửa đổi lần cuối. Tuy nhiên, thông tin được gửi 
phụ thuộc vào server; một server nào đó gửi tất cả các thông tin này cho mỗi yêu cầu, các 
server khác gửi các thông tin nào đó, và một số ít server không gửi thông tin nào. Các 
phương thức của mục này cho phép ta truy vấn một URLConnection để tìm ra thông tin 
MIME nào mà server đã cung cấp. 
Sưu tầm bởi: www.daihoc.com.vn 
 114
Ngoài HTTP, rất ít giao thức sử dụng các header MIME. Khi viết lớp con của lớp 
URLConnection, thông thường cần phải nạp chồng các phương thức này sao cho chúng 
trả về các giá trị có ý nghĩa. Phần thông tin quan trọng nhất bạn có thể thiếu là kiểu nội 
dung MIME. URLConnection cung cấp một số phương thức tiện ích nào đó mà trợ giúp 
bạn đoán nhận ra kiểu nội dung, dựa trên tên file của nó hoặc một số byte đầu tiên của 
chính dữ liệu. 
 public String getContentType() 
Phương thức trả về kiểu nội dung MIME của dữ liệu. Nó phụ thuộc vào web server 
gửi một header MIME tương ứng, bao gồm một kiểu nội dung xác thực. Nó không 
đưa ra ngoại lệ và trả về giá trị null nếu kiểu nội dung không có. text/htm sẽ là kiểu 
nội dung mà bạn thường xuyên gặp nhất khi kết nối với web server. Các kiểu nội 
dung phổ biến khác bao gồm: text/plain, image/gif, image/jpeg. 
 public int getContentLength() 
Phương thức này cho ta biết nội dung có kích thước bao nhiêu byte. Rất nhiều 
server chỉ gửi các header độ dài nội dung khi chúng truyền một file nhị phân, chứ 
không phải khi truyền một file văn bản. Nếu không có chiều dài nội dung, phương 
thức getContentLength() trả về -1. Phương thức này không đưa ra ngoại lệ. Nó 
được sử dụng khi ta cần biết cần đọc bao nhiêu byte, hoặc khi ta cần tạo ra một 
buffer đủ lớn để lưu trữ dữ liệu. 
 public String getContentEncoding() 
Phương thức này trả về String cho ta biết cách thức mã hóa. Nếu nội dung được 
gửi không được mã hóa (như trong trường hợp của HTTP server), phương thức 
này trả về giá trị null. Nó không đưa ra ngoại lệ. 
 public long getDate() 
Phương thức getDate() trả về một số nguyên kiểu long cho bạn biết tài liệu đã 
được gửi khi nào. Ta có thể chuyển đổi nó sang một đối tượng kiểu java.util.Date. 
Ví dụ: 
Date docSent = new Date(uc.getDate()); 
Đây là thời gian tài liệu được gửi trên server. Nếu header MIME không có một 
header Date. 
 public long getExpiration() 
 public long getLastModified() 
Phương thức date, getLastModified(), trả về ngày mà tài liệu được sửa đổi lần 
cuối 
Ví dụ: Đọc các URL từ dòng lệnh, và sử dụng 6 phương thức để in ra kiểu nội dung, 
chiều dài nội dung, mã hóa nội dung, ngày sửa đổi cuối cùng, ngày hết hạn, và ngày hiện 
hành. 
3.2. Tìm kiếm các trường Header MIME 
Sáu phương thức cuối cùng đòi hỏi các trường nhất định từ header MIME, nhưng 
không có giới hạn nào về số các trường header mà một thông điệp MIME có thể có. Năm 
phương thức tiếp theo kiểm tra các trường nhất định trong header MIME. 
FileURLConnection không có các header MIME thực sự , vì vậy tất cả các phương 
thức này trả về giá trị null khi bạn đang làm việc với một file: URL, hành vi mặc định của 
chúng. HttpURLConnections tìm ra một trường header để thỏa mãn yêu cầu của bạn. 
Nếu được tìm thấy, nó được trả về, ngược lại nó trả về giá trị null. 
 public String getHeaderField(String name) 
Sưu tầm bởi: www.daihoc.com.vn 
 115
Phương thức getHeaderField() trả về giá trị của trường header MIME được đặt tên. 
Tên của header không phân biệt chữ hoa và chữ thường và không chứa dấu kết 
thúc. 
Ví dụ, để tìm giá trị của các trường header Content-type, Content-encoding của 
một đối tượng URLConnection uc bạn có thể viết: 
uc.getHeaderField(“content-type”); 
uc.getHeaderField(“content-encoding”); 
Để nhận thông tin về các trường Date, Content-length, hoặc Expiration bạn cũng 
thực hiện tương tự: 
uc.getHeaderField(“date”); 
uc.getHeaderField(“expires”); 
uc.getHeaderField(“Content-length”); 
Tất cả các phương thức này đều trả về các String, không phải int cũng không phải 
long như các phương thức getContentLength(); getExpirationDate(), getLastModified(), và 
getDate(). Nếu bạn quan tâm đến một giá trị số, bạn phải chuyển đổi String thành long 
hoặc int. 
 public String getHeaderFieldKey(int n) 
Phương thức này trả về khóa (nghĩa là tên trường: ví dụ, Content-length hoặc 
Server) của trường header thứ n. Header đầu tiên là 0. Ví dụ, để nhận khóa thứ 6 
của header MIME của URLConnection, bạn viết: 
String header5=uc.getHeaderFieldKey(5); 
 public String getHeaderField(int n) 
Phương thức này trả về giá trị trường header MIME thứ n. Header MIME đầu tiên 
là một. 
Ví dụ: Sử dụng phương thức kết hợp với phương thức getHeaderFieldKey()để in ra 
header MIME. 
 public long getHeaderFieldDate(String name, long default) 
Phương thức này trước hết tìm kiếm trường header được xác định bởi tham số 
name và cố gắng chuyển đổi xâu này sang kiểu long. 
3.3. Các phương thức RequestProperty 
Bốn phương thức sau không thực hiện bất kỳ công việc gì trong lớp cơ sở 
URLConnection, cũng không được cài đặt trong các lớp FileURLConnection hoặc 
HttpConnection. Bạn có thể mong muốn nạp chồng chúng trong một lớp con để cài đặt 
phương thức tra cứu bảng băm, chẳng hạn để xây dựng một bảng băm chứa tất cả các 
header MIME của yêu cầu. 
 public String getRequestProperty(String property_name) 
Phương thức này đưa ra một ngoại lệ IllegalAccesError nếu liên kết là mở, ngược 
lại phương thức trả về giá trị null. Nếu bạn nạp chồng nó, các phương thức của 
bạn cần trả về giá trị gắn với một thuộc tính cho trước như là một xâu. 
 public static void setDefaultRequestProperty(String property_name, String 
property_value) 
Phương thức này không thực hiện công việc gì. Nếu bạn nạp chồng phương thức 
này, bạn sẽ sử dụng nó để lưu trữ một giá trị mặc định cho thuộc tính cho trước. 
Sưu tầm bởi: www.daihoc.com.vn 
 116
 public void setRequestProperty(String property_name, String property_value) 
Phương thức này trả về ngoại lệ IllegalAccessError nếu liên kết đang mở. Ngược 
lại nó không thực hiện gì. Nếu bạn nạp chồng nó, bạn sẽ sử dụng nó để lưu trữ giá 
trị của một thuộc tính cho trước. 
 public String getDefaultRequest(String property_name) 
Phương thức này luôn trả về giá trị null. Nếu bạn nạp chồng phương thức này, bạn 
cần trả về giá trị mặc định được gán cho một thuộc tính cho trước như là một String. 
 protected URLConnection(URL u) 
Contructor trong URLConnection nhận một tham số là URL để thực hiện việc liên 
kết. Tất cả các tính chất khác của một URLConnection ban đầu được thiết lập là 
các giá trị mặc định của chúng và bạn có thể thay đổi chúng bằng tập các phương 
thức. Vì constructor có tính chất protected, chỉ có các đối tượng trong gói java.net 
mới có thể tạo ra một URLConnection. URLConnection là một lớp trừu tượng vì 
vậy bạn chỉ có thể gọi constructor của nó từ constructor của một trong các lớp con 
của nó. 
Nếu bạn đang tạo ra lớp con của lớp URLConnection, bạn phải gọi constructor này 
trong dòng đầu của constructor của lớp con như sau: 
myURLConnection(URL u) 
{ 
super(u); 
} 
Nếu bạn không đưa vào một lời gọi cụ thể tới constructor trong lớp con của bạn, 
Java cố gắng tạo ra một constructor không tham số của lớp cha: ví dụ URLConnection(). 
Vì lớp URLConnection không cung cấp các constructor không tham số, loại bỏ lời gọi cụ 
thể sẽ gây ra lỗi biên dịch. 
3.4. Các trường và các phương thức có liên quan 
Có mười ba trường trong lớp java.net. URLConnection. Bảy trường là các biến tĩnh 
định nghĩa các giá trị mặc định cho các thể hiện của lớp URLConnection. Sáu phương 
thức khác định nghĩa trạng thái của một đối tượng URLConnection cụ thể. Một vài 
phương thức get và set thay đổi các giá trị của chúng. 
Hầu hết các phương thức thiết lập các trường đưa ra ngoại lệ 
IllegalAccessExceptions nếu bạn gọi chúng trong khi liên kết đang mở. Nhìn chung, bạn 
chỉ có thể thiết lập các thuộc tính của một đối tượng URLConnection trong khi liên kết 
đóng. 
 protected URL url 
 public URL getURL() 
Trường url xác định URL mà URLConnection liên kết tới nó. Nó được thiết lập bởi 
constructor khi bạn tạo ra một URLConnection, và không cần thay đổi. Bạn có thể tìm 
kiếm giá trị bằng cách gọi phương thức getURL(). 
import java.net.*; 
import java.io.IOException; 
public class printURLConnection 
{ 
 public static void main(String[] args) 
 { 
Sưu tầm bởi: www.daihoc.com.vn 
 117
 URL u; 
 URLConnection uc; 
 try{ 
 u = new URL(""); 
 try 
 { 
 uc=u.openConnection(); 
 System.out.println(uc.getURL()); 
 } 
 catch(IOException e) 
 { 
 System.err.println(e); 
 } 
 } 
 catch(MalformedURLException e) 
 { 
 System.err.println(e); 
 } 
 } 
} 
 protected boolean connected 
Trường connected là đúng nếu liên kết là mở và là sai nếu liên kết đóng. Vì bạn 
không mở liên kết khi một đối tượng URLConnection được tạo ra, giá trị ban đầu của nó 
là false. Bạn chỉ có thể truy cập tới biến này thông qua các thể hiện của lớp 
URLConnection và các lớp con của nó. Không có các phương thức đọc hoặc thay đổi giá 
trị của nó. Khi viết một trình quản trị giao thức, bạn có nhiệm vụ thiết lập giá trị của biến 
này là true và thiết lập lại nó bằng giá trị false khi liên kết đóng. Rất nhiều phương thức 
trong gói java.net. URLConnection đọc biến này để xác định xem chúng có thể thực hiện 
việc gì. Nếu việc thiết lập không chính xác chương trình của bạn sẽ gặp các lỗi không dễ 
chuẩn đoán. 
 protected boolean allowUserInteraction 
 public void setAllowUserInteraction(boolean allowuserinteraction) 
 public boolean getAllowUserInteraction() 
Một số URLConnection cần tương tác với người dùng. Ví dụ, một trình duyệt web 
có thể yêu cầu username và password. Tuy nhiên, rất nhiều ứng dụng không thể khẳng 
định một người sử dụng đang có mặt để tương tác với nó. Như ý nghĩa của tên, 
allowUserInteraction xác định xem liệu tương tác người sử dụng có được phép hay 
không. Ở chế độ mặc định nó được thiết lập là false. Vì biến này là protected, ta có thể sử 
dụng phương thức getAllowUserInteraction()để đọc giá trị của nó và sử dụng phương 
thức setAllowUserInteraction()để thiết lập giá trị của nó. Giá trị true chỉ ra rằng tương tác 
với người sử dụng là được phép; giá trị false chỉ ra rằng không có tương tác với người 
dùng. Giá trị có thể được đọc ở bất kỳ thời điểm nào, nhưng nó chỉ có thể được thiết lập 
Sưu tầm bởi: www.daihoc.com.vn 
 118
khi liên kết bị đóng. Gọi phương thức setAllowUserInteraction() khi liên kết mở sẽ đưa ra 
ngoại lệ IllegalAccessError (chứ không phải là IllegalAccessException). Các chương trình 
thường không đón bắt các lỗi (không giống như các ngoại lệ); một lỗi không được đón bắt 
thường buộc chương trình phải kết thúc. 

File đính kèm:

  • pdfgiao_trinh_lap_trinh_mang_voi_ngon_ngu_java_phan_1.pdf