Lập trình mạng bằng Java

214 2.8K 50
Lập trình mạng bằng Java

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình mạng bằng Java

Lời mở đầu Lập trình mạng nhiệm vụ để phát triển ứng dụng doanh nghiệp Một chương trình mạng viết để chương trình máy tính khác truyền tin với cách hiệu an toàn cho dù chúng cài đặt mạng LAN, WAN hay mạng toàn cầu Internet, điều thành công nhiều hệ thống Java ngơn ngữ lập trình hướng đối tượng túy với nhiều đặc trưng ưu việt so với ngơn ngữ lập trình hướng đối tượng khác tính độc lập với nên, tính bảo mật,…Java ngơn ngữ từ đời hướng đến lập trình mạng nên việc viết chương trình lập trình mạng Java dễ dàng nhiều so với ngơn ngữ khác Giáo trình bao gồm 10 chương: Chương 1: Giới thiệu khái niệm mạng máy tính để người đọc tiếp cận với chương Trong chương vào xem xét mạng vật lý, phần cứng sử dụng mạng LAN Tiếp theo tìm hiểu mơ hình phân tầng OSI bảy tầng, tương ứng họ giao thức TCP/IP với tầng mơ hình OSI Sau vào tìm hiểu giao thức mạng, giao thức Internet, giao thức e-mail Chương 2: Giới thiệu ngơn ngữ lập trình Java Chương trình bày khái niệm ngơn ngữ lập trình Java Giới thiệu lịch sử phát triển cấu trúc máy ảo Java Những đặc trưng tạo nên sức mạnh ngôn ngữ Java giới thiệu chương Cũng chương vào tìm hiểu cách cấu hình cài đặt môi trường biên dịch, chạy soạn thảo ngôn ngữ Java Tiếp đến ta vào tìm hiểu thành phần Java kiểu liệu, cấu trúc lệnh rẽ nhánh, lặp, nhảy Tiếp theo vào tìm hiểu khái niệm liên quan đến lập trình hướng đối tượng Java lớp, phương thức, thuộc tính, từ khóa bổ trợ static, final, abstract, thừa kế tính đa hình Java Một khái niệm mà ngôn ngữ truyền thống trước ngoại lệ đón bắt ngoại lệ Java giới thiệu Chương 3: Các luồng vào Chương giới thiệu khái niệm vào luồng liệu Trước tiên ta tìm hiểu luồng ý nghĩa luồng chương trình Java Tiếp đến tìm hiểu luồng vào chuẩn gói làm việc với console Các luồng trừu tượng java.io.InputStream, java.io.OutputStream luồng để từ xây dựng nên luồng cụ thể Luồng chia thành nhóm luồng byte luồng ký tự Từ phiên Java 1.4 đặc trưng vào Java đưa vào giới thiệu chương Việc nắm vững kiến thức chương giúp cho việc lập trình ứng dụng mạng trở nên đơn giản thực chất việc truyền nhận liệu ứng dụng mạng việc đọc ghi luồng Chương 4: Lập trình đa tuyến đoạn Trong ngơn ngữ lập trình trước ứng dụng hầu hết ứng dụng đơn tuyến đoạn Để tăng tốc độ xử lý giải vấn đề tương tranh ứng dụng nói chung ứ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 chương trình bày khái niệm tiến trình, tuyến đoạn Tiếp đến xem xét cách cài đặt ứng dụng tuyến đoạn Java lớp Thread thực thi giao tiếp Runnable Sau ta vào tìm hiểu phương thức lớp Thread Sự đồng hóa cách cài đặt chương trình đồng hóa giới thiệu chương Chương 5: Lập trình mạng với lớp InetAddress, URL URLConnection Lớp InetAddress lớp lập trình mạng mà ta cần tìm hiểu Nó cách chương trình Java tương tác với hệ thống tên miền Tiếp đến ta vào tìm hiểu khái niệm URI, URL,URN lớp biểu diễn URL Java Cách sử dụng URL để tải thông tin tệp tin từ server Sau ta vào tìm hiểu lớp URLConnection, lớp đóng vai trị động 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 tìm hiểu cách lập trình cho mơ hình client/server kiểu kiến trúc client/server Các lớp Socket ServerSocket trình bày chi tiết chương để lập 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 giới thiệu giao thức UDP đặc trưng giao thức Tiếp đến ta vào tìm hiểu lớp DatagramPacket DatagramSocket để viết 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 ứng dụng lập trình mạng Trình bày vấn đề hóa ứng dụng hóa lập trình mạng Chương 9: Phân tán đối tượng Java RMI Chương tìm hiểu chủ đề lập trình phân tán đối tượng kỹ thuật gọi phương thức RMI (Remote Method Invocation) Chương 10:Xử lý sở liệu Java Trình bày cách thức kết nối sở liệu xử lý sở liệu Java thông qua giao diện lập trình ứng dụng JDBC Tìm hiểu lập trình mạng tốt hệ thống mạng thực với nhiều máy tính kết nối vật lý Tuy nhiên giáo trình hầu hết ví dụ trình bày để bạn đọc lập trình thử nghiệm ứng dụng mạng máy đơn Mặc dù cố gắng để trình bày giáo trình cách dễ hiểu với ví dụ minh họa giúp bạn đọc thử nghiệm sau tìm hiểu vấn đề lý thuyết, chắn giáo trình khơng thể tránh khỏi thiếu sót định Rất mong góp ý phê bình bạn độc giả Mọi thắc mắc góp ý bạn gửi theo địa e-mail sau:lequocdinh@vnn.vn hoan_td2001@yahoo.com Để hoàn thành giáo trình tác giả nhận giúp đỡ nhiều từ bạn bè, đồng nghiệp người thân Xin chân thành cảm ơn tới tất người Nhóm tác giả Sưu t m b i: www.daihoc.com.vn MỤC LỤC Lời mở đầu Chương 1:Các khái niệm mạng giao thức 1 Mạng máy tính 1.1 Các đường WAN 1.2 Giao thức Ethernet 1.3 Các thành phần vật lý Mơ hình phân tầng 2.1 Tầng 1:Tầng vật lý 2.2 Tầng 2: Tầng liên kết liệu 2.3 Tầng 3: Tầng mạng 2.4 Tầng 4:Tầng giao vận 2.5 Tầng 5: Tầng phiên 2.6 Tầng 6:Tầng trình diễn 2.7 Tầng 7:Tầng ứng dụng Các giao thức mạng 3.1 Các giao thức 3.2 Các giao thức Internet 14 Soket 17 Dịch vụ tên miền 17 5.1 Các server tên miền 18 5.2 Nslookup 19 Internet Extranet 20 6.1 Intranet Extranet20 6.2 Firewall 20 6.3 Proxy Server 20 Chương : Giới thiệu ngôn ngữ lập trình Java 21 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 máy ảo Java – Java Virtual Machine 21 1.3 Các đặc trưng Java 21 1.4 Các ấn Java 22 1.5 Công cụ phát triển 23 1.6 Các kiểu ứng dụng Java 23 1.7 Cài đặt chương trình dịch Java công cụ 23 1.8 Một số ví dụ mở đầu 25 Ngơn ngữ lập trình Java 27 2.1 Cấu trúc tệp chương trình Java 27 2.2 Định danh, kiểu liệu khai báo biến 28 2.3 Các kiểu liệu nguyên thủy (primitive datatype) 28 2.4 Khai báo biến 30 2.5 Các lệnh Java 31 2.6 Các lớp đối tượng Java 36 2.7 Giao tiếp – Interface 48 2.8 Các gói sử dụng gói Java 50 2.9 Quản lý ngoại lệ 52 I Sưu t m b i: www.daihoc.com.vn Chương 3: Các luồng vào 59 Khái niệm luồng Java 59 1.1 Khái niệm luồng(stream) 59 Luồng xuất nhập chuẩn 60 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 Luồng ký tự 68 4.1 Sự tương ứng luồng byte 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 Luồng đệm 73 Luồng vào – New Input Output 74 6.1 Căn NIO 74 6.2 Buffer (Các vùng đệm) 74 6.3 Các kênh (Channel) 76 6.4 Charset Selector 76 6.5 Đọc tệp 77 6.6 Ghi tệp tin 80 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 Tạo ứng dụng đa tuyến đoạn với lớp Thread 86 Tạo ứng dụng đa tuyến đoạn với giao tiếp Runnable 87 Sự đồng hóa 88 4.1 Các phương thức synchronized 88 4.2.Lệnh synchronized 89 Phương thức wait notify 90 Lập lịch cho tuyến đoạn 91 Hoài vọng-Deadlock 92 Điều khiển tuyến đoạn 94 8.1 Ngắt tuyến đoạn Thread 94 8.2 Kết thúc việc thực thi tuyến đoạn 95 8.3 Tạm dừng phục hồi việc xử lý tuyến đoạn 96 II Sưu t m b i: www.daihoc.com.vn Các nhóm tuyến đoạn –ThreadGroup 96 9.1 Tạo nhóm Thread 98 10 Một ví dụ minh họa việc sử dụng tuyến đoạn 98 11 Kết luận 100 Chương 5: Lập trình mạng với lớp InetAddress, URL URLConnection 102 Lớp InetAddress102 1.1 Tạo đối tượng InetAddress102 1.2 Nhận trường thông tin đối tượng InetAddress 103 1.3 Một số chương trình minh họa 104 Lớp URL 105 2.1 Tạo URL 105 2.2 Phân tích URL thành thành phần 106 2.3 Tìm kiếm liệu từ URL 108 2.4 Các phương thức tiện ích 109 Lớp URLConnection109 3.1 Mở URLConnection 110 3.2 Đọc liệu từ server 111 3.3 Phân tích Header 113 Chương 6: Lập trình Socket cho giao thức TCP 119 Mơ hình client/server 119 Các kiến trúc Client/Server 120 2.1 Client/Server hai tầng (two-tier client/server) 120 2.2 Client/Server ba tầng 121 2.3 Kiến trúc n-tầng 122 Mơ hình truyền tin socket 122 Socket cho Client 124 4.1 Các constructor 124 4.2 Nhận thông tin Socket 125 4.3 Đóng Socket 126 4.4 Thiết lập tùy chọn cho Socket127 4.5 Các phương thức lớp Object127 4.6 Các ngoại lệ Socket 127 4.7 Các lớp SocketAddress 127 Lớp ServerSocket 128 5.1 Các constructor 128 5.2 Chấp nhận ngắt liên kết 129 Các bước cài đặt chương trình phía Client Java 131 Các bước để cài đặt chương trình Server Java 134 Ứng dụng đa tuyến đoạn lập trình Java 136 Kết luận 141 Chương 7: Lập trình ứng dụng cho giao thức UDP 142 Tổng quan giao thức UDP 142 1.1 Một số thuật ngữ UDP 142 1.2 Hoạt động giao thức UDP 143 1.3 Các nhược điểm giao thức UDP 143 1.4 Các ưu điểm UDP 144 1.5 Khi nên sử dụng UDP 144 Lớp DatagramPacket 145 III Sưu t m b i: www.daihoc.com.vn 2.1 Các constructor để nhận datagram 145 2.2 Constructor để gửi datagram 146 Lớp DatagramSocket 148 Nhận gói tin 148 Gửi gói tin 150 Ví dụ minh họa giao thức UDP 151 Chương 8: Phân tán đối tượng Java RMI 159 1.Tổng quan 159 Mục đích RMI 159 Một số thuật ngữ 160 Các lớp trung gian Stub Skeleton 160 Cơ chế hoạt động RMI 160 Kiến trúc RMI 163 Cài đặt chương trình 164 Triển khai ứng dụng 166 Các lớp giao tiếp gói java.rmi 167 9.1 Giao tiếp Remote 167 9.2 Lớp Naming 167 10 Các lớp giao tiếp gói java.rmi.registry 168 10.1 Giao tiếp Registry 168 10.2 Lớp LocateRegistry 168 11 Các lớp giao tiếp gói java.rmi.server 169 11.1 Lớp RemoteObject 169 11.2 Lớp RemoteServer 169 11.3 Lớp UnicastRemoteObject 169 12 Kết luận169 Chương : Xử lý sở liệu Java 171 JDBC Java Database Connectivity API 171 Cấu trúc JDBC 171 2.1 Kiểu 172 2.2 Kiểu 173 2.3 Kiểu 174 2.4 Kiểu 175 Kết nối sở liệu 176 3.1 DriverManager 176 3.2 Connection 176 3.3 Statement 177 3.4 ResultSet 177 Lớp DatabaseMetaData 178 Lớp ResultSetMetaData 179 Các bước để kết nối với sở liệu từ ứng dụng Java 180 Sử dụng PreparedStatement 185 Sử dụng giao tác 187 Tài liệu tham khảo 190 IV Sưu t m b i: www.daihoc.com.vn Chương Các khái niệm mạng giao thức mạng Mạng máy tính Mạng máy tính Là tập hợp máy tính thiết bị nối với đường truyền vật lý theo kiến trúc Chúng ta phân loại mạng theo qui mơ nó:  Mạng LAN (Local Area Network)-mạng cục bộ: kết nối nút phạm vi giới hạn Phạm vi cơng ty, hay tịa nhà  Mạng WAN (Wide Area Network): nhiều mạng LAN kết nối với tạo thành mạng WAN  MAN (Metropolitan Area Network), tương tự WAN, kết nối nhiều mạng LAN Tuy nhiên, mạng MAN có phạm vi thành phố hay đô thị nhỏ MAN sử dụng mạng tốc độ cao để kết nối mạng LAN trường học, phủ, cơng ty, , cách sử dụng liên kết nhanh tới điểm cáp quang Khi nói đến mạng máy tính, người ta thường đề cập tới mạng xương sống (backbone) Backbone mạng tốc độ cao kết nối mạng có tốc độ thấp Một cơng ty sử dụng mạng backbone để kết nối mạng LAN có tốc độ thấp Mạng backbone Internet xây dựng mạng tốc độ cao kết nối mạng tốc độ cao Nhà cung cấp Internet kết nối trực tiếp với mạng backbone Internet, nhà cung cấp lớn 1.1 Các đường kết nối mạng WAN Để kết nối tới mạng WAN, có số tùy chọn sau:  Khi khách hàng cụ thể yêu cầu sử dụng mạng với thông lượng xác định, sử dụng đường thuê bao (leased line)  Các đường chuyển mạch (switched lines) sử dụng dịch vụ điện thoại thông thường Một mạch thiết lập phía nhận phát khoảng thời gian thực gọi trao đổi liệu Khi khơng cịn cần dùng đường truyền nữa, 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ụ đường chuyển mạch đường POTS , ISDN, DSL  Mạng chuyển mạch gói mạng mà 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 cung cấp hiệu cao khả chia sẻ tài nguyên khách hàng Các giao thức sử dụng cho mạng chuyển mạch bao gồm X.25 (64Kbps), Frame Relay (44.736Mbps), ATM (9.953 Gbps) Kiến trúc mạng: Một vấn đề cần quan tâm mạng máy tính kiến trúc mạng Nó cập tới hai khía cạnh Hình trạng mạng Giao thức mạng  Hình trạng mạng: Là cách nối máy tính với Người ta phân loại mạng theo hình trạng mạng mạng sao, mạng bus, mạng ring…  Giao thức mạng: Là tập hợp qui tắc, qui ước truyền thông mạng mà tất thực thể tham gia truyền thông phải tuân theo Sưu t m b i: www.daihoc.com.vn 1.2 Giao thức Ethernet Để có hiểu biết tốt mạng vật lý hoạt động nào, xem xét số giao thức LAN phổ biến: giao thức Ethernet Chín mươi phần trăm thiết bị gắn với mạng LAN sử dụng giao thức Ethernet, ban đầu phát triển Xerox, Digital Equipement, Intel năm 1972 Ngày nay, Ethernet hỗ trợ đường truyền 100Mbps 1Gbps Rất nhiều cơng nghệ đường truyền sử dụng với Ethernet Người ta sử dụng số qui ước để đặt tên giao thức Enternet Tên tốc độ mạng Ethernet thuộc tính công nghệ đường truyền Các tên bắt đầu số để tốc độ truyền tối đa, từ sử dụng để xác định công nghệ truyền dẫn, cuối số để khoảng cách hai nút Ví dụ, 10Base2 ký hiệu Ethernet hoạt động với tốc độ 10Mbps sử dụng kỹ thuật truyền băng tần sở, với cáp có chiều dài tối đa 200m Một số cấu hình thơng dụng khác sau: Chuẩn Ethernet 10Base5 10BaseT Tốc độ 10Mbps 10Mbps Kiểu cáp Cáp đồng trục Cáp đồng 100BaseTX 100Mbs Cáp đồng 1000BaseSX 1000Mbps Cáp đa chế độ  Mô tả Đây chuẩn ban đầu cho Ethernet 10BaseT mạng 10Mbps với cáp xoắn 100Mbps công nghệ cáp xoắn khả truyền song công 1000Mbps với cáp sợi quang S :Short wavelength (850nm) Bảng 1.1 CSMA/CD (Carrier Sense Multiple Access/Collision Detect) Nhiều thiết bị kết nối vào mạng tất có quyền truy xuất đồng thời Khi thơng điệp gửi đi, truyền thơng qua mạng Phía nhận định danh địa nhất, có nút đọc thơng điệp, cịn nút khác bỏ qua Một vấn đề đặt có nhiều nút cố gắng gửi thông điệp thời điểm, điều phá hỏng gói tin Giải pháp cho vấn đề nút mạng giám sát mạng phát mạng rảnh hay bận Một nút bắt đầu gửi liệu khơng có liệu gửi mạng trước CSMA phận CSMA/CD Tuy nhiên có khả hai nút, sau kiểm tra thấy mạng không bận, bắt đầu gửi gói tin thời điểm cáp mạng Điều gây lên xung đột hai gói tin, kết phá hỏng liệu Cả hai phía gửi nhận thức gói tin bị hỏng lắng nghe mạng gửi liệu, phát xung đột Đây CD (Collision Dection) CSMA/CD Cả hai nút dừng việc truyền liệu tức thời, chờ thời điểm định trước kiểm tra mạng trở lại để xem mạng có rỗi hay khơng truyền lại Mỗi nút mạng sử dụng địa MAC (Media Access Control) để định danh Địa định nghĩa thiết bị giao tiếp mạng Một gói tin gửi mạng, thiết bị mạng không nhận diện host host nhận, bỏ qua gói tin chuyển tiếp Sưu t m b i: www.daihoc.com.vn  Các giao thức khác IBM phát triển giao thức Token Ring (IEEE802.5), nút mạng kết nối theo vòng Với Ethernet, nút gửi thơng điệp khơng có gói tin mạng Với Token Ring nút có quyền truy xuất tới mạng theo thứ tự định trước Một token lưu chuyển vòng quanh vòng, nút lệnh có thẻ gửi thơng điệp Ngày nay, Ethernet thay dần mạng Token Ring mạng tốn khó cài đặt AppleTalk giao thức mạng LAN phát triển Apple tương đối phổ biến trường học, nhà máy, ATM giao thức khác tìm thấy mạng LAN Nó hỗ trợ mạng tốc độ cao sử dụng kỹ thuật chuyển mạch có đảm bảo chất lượng dịch vụ 1.3 Các thành phần vật lý Một vấn đề quan trọng để biết mạng biết phần cứng Chúng ta xem xét thành phần chủ yếu mạng LAN sau: o o Hub o Switch o  Thiết bị giao tiếp mạng Router Thiết bị giao tiếp mạng (Network Interface Thiết bị) NIC thiết bị giao tiếp sử dụng để kết nối thiết bị với mạng LAN Nó cho phép gửi nhận thông điệp từ mạng Một NIC có địa MAC mà cung cấp định danh cho thiết bị Địa MAC số 12 byte-hệ 16 gán cho thiết bị mạng Địa thay đổi trình điều khiển mạng cách linh hoạt (như trường hợp hệ thống DECnet, mạng phát triển Digital Equipment), thông thường địa MAC khơng thay đổi Ta tìm địa MAC máy sử dụng hệ điều hành Windows cách dùng tiện ích dịng lệnh ipconfig DOS với tham số switch Hình 1.1 Sưu t m b i: www.daihoc.com.vn  Hub Nhiều thiết bị kết nối cách dễ dàng với giúp đỡ hub Hub thiết bị kết nối gắn nhiều thiết bị vào LAN Mỗi thiết bị thường kết nối thông qua cáp tới cổng hub Hub hoạt động chuyển tiếp Khi chuyển thơng điệp từ cổng tới cổng khác, chuyển tới mạng Hub thành phần tương đối đơn giản mạng, hoạt động tầng vật lý để truyền liệu mà không cần thao tác xử lý Điều làm cho hub dễ cài đặt quản lý, chúng khơng địi hỏi cấu hình đặc biệt  Switch Các chuyển mạch (switch) phân chia mạng thành đoạn (segment) So với hub, switch thiết bị thông minh nhiều Switch lưu trữ địa MAC thiết bị kết nối tới cổng bảng lookup Các bảng lookup cho phép switch lọc thông điệp mạng không giống với hub, khơng chuyển tiếp thơng điệp tới cổng Điều loại bỏ xung đột xảy mạng đạt hiệu tốt Chức chuyển mạch thực cách sử dụng phần cứng  Router Router thiết bị trung gian mạng, kết nối nhiều mạng vật lý Một mạng có nhiều host phân chia thành phần riêng, hay gọi subnet Ưu điểm subnet là: Hiệu cải thiện cách giảm broadcast, broadcast thông điệp gửi tới tất nút mạng Khả hạn chế người dùng mạng xác định đưa ưu điểm bảo mật Các subnet nhỏ dễ quản lý so với mạng lớn Các router không sử dụng LAN, chúng có vai trị quan trọng WAN Router nhận thông điệp chuyển tiếp tới đích cách sử dụng đường tốt tới đích Một Router lưu giữ bảng định tuyến liệt kê tất cách mà mạng đạt tới Thơng thường có số đường từ mạng tới mạng khác, có số tốt nhất, đường mơ tả bảng định tuyến Các router truyền tin cách sử dụng giao thức định tuyến để phát router khác mạng, hỗ trợ cho việc trao đổi thông tin mạng gắn với định tuyến Thông tin mà định tuyến thu thập đường mạng gọi độ đo router, bao gồm thơng tin mát gói tin thời gian truyền tin Thông tin sử dụng để tạo độ đo tùy thuộc vào giao thức định tuyến: Giao thức định tuyến vectơ khoảng cách Các giao thức RIP(Routing Information Protocol) IGRP(Interior Gateway Routing Protocol) sử dụng biến đếm để số router mà gói tin phải qua để đến đích Các giao thức thường lựa chọn đường với router, mà không quan tâm đến tốc độ độ tin cậy Các giao thức định tuyến trạng thái liên kết Việc tính tốn đường tốt giao thức định tuyến OSPF BGP quan tâm đến nhiều yếu tố tốc độ, độ tin cậy, chí chi phí đường Các giao thức định tuyến lai Sưu t m b i: www.daihoc.com.vn Ta thực điều cách gọi phương thức commit() đối tượng liên kết Nếu ta cố gắng xử lý hay nhiều lệnh giao tác nhận ngoại lệ SQLException, ta cần gọi phương thức rollback() để hủy bỏ giao tác khởi động lại toàn giao tác con.setAutoCommit(false); PreparedStatement updateName =null; String query = null; Query="UPDATE license SET name = ? WHERE id = 126" updateName= con.prepareStatement(query); updateName.setString(1, name); updateName.executeUpdate(); PreparedStatement updateSex = null; query = "UPDATE test SET test_value =?” updateSex = con.prepareStatement(query); updateSex.setString(1, "Male"); updateSex.executeUpdate(); con.commit(); con.setAutoCommit(true); Ví dụ: import java.sql.*; public class PreparedUpdate{ public static void main(String args[]) throws Exception{ int empid; int rows=0; String LastName; String FirstName; String query = "insert into EMP " +"(EmployeeID,LASTNAME,FIRSTNAME) " +"values " +"(?,?, ?)"; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection =DriverManager.getConnection ("jdbc:odbc:MyData"); con.setAutoCommit(false); PreparedStatement pstmt = con.prepareStatement(query); pstmt.setInt(1,Integer.parseInt(args[0])); pstmt.setString(2,args[1]); pstmt.setString(3,args[2]); rows = pstmt.executeUpdate( ); pstmt.close( ); 16 Sưu t m b i: www.daihoc.com.vn pstmt = null; System.out.println(rows + " rows inserted"); System.out.println(""); con.commit(); } catch(ClassNotFoundException e){ e.printStackTrace(); } catch(SQLException e){ e.printStackTrace(); } } } Sử dụng giao tác Sau thực lệnh: Các chương trình Java thực lệnh CSDL thông qua đối tượng Statement Các câu lệnh SQL thực tức thơng qua đối tượng Statement, câu lệnh biên dịch trước (đối tượng PreparedStatement) lệnh gọi thủ tục cài sẵn (Stored Procedure) CSDL (đối tượng CallableStatement) Các câu lệnh SQL thực thơng qua phương thức executeQuery() – kết đối tượng ResultSet, hay phương thức executeUpdate() – kết số nguyên cho biết tổng số record chịu ảnh hưởng câu lệnh vừa thực (thường câu lệnh sửa đổi liệu Update Delete) Trong trường hợp có sử dụng trình quản lý transaction, phương thức rollback() dùng để phục hồi trạng thái trước commit() đế xác nhận việc thực lệnh Để chấm dứt cần xóa kết nối, xóa đối tượng để giải phóng tài nguyên hệ thống 17 Sưu t m b i: www.daihoc.com.vn Chương 10 TUẦN TỰ HÓA ĐỐI TƯỢNG VÀ ỨNG DỤNG TRONG LẬP TRÌNH MẠNG Tuần tự hóa đối tượng 1.1 Khái niệm Tuần tự hóa q trình chuyển tập hợp thể đối tượng chứa tham chiếu tới đối tượng khác thành luồng byte tuyến tính, luồng gửi qua Socket, lưu vào tệp tin xử lý dạng luồng liệu Tuần tự hóa chế sử dụng RMI để truyền đối tượng máy ảo JVM dạng tham số lời gọi phương thức từ client tới server giá trị trả từ lời gọi phương thức Tuần tự hóa chế xây dựng đưa vào lớp thư viện Java để chuyển đồ thị đối tượng thành luồng liệu Luồng liệu sau xử lý cách lập trình ta tạo lại đối tượng ban đầu nhờ trình ngược lại gọi giải hóa Tuần tự hóa có ba mục đích sau  Cơ chế ổn định: Nếu luồng sử dụng FileOuputStream, liệu tự động ghi vào tệp  Cơ chế chép: Nếu luồng sử dụng ByteArrayObjectOuput, liệu ghi vào mảng byte nhớ Mảng byte sau sử dụng để tạo đối tượng ban đầu  Nếu luồng sử dụng xuất phát từ Socket liệu tự động gửi tới Socket nhận, chương trình khác định phải làm liệu nhận Một điều quan trọng khác cần ý việc sử dụng hóa độc lập với thuật tốn hóa 1.2 Khả (Serializable) Chỉ có đối tượng thực thi giao diện Serializable ghi lại phục hồi tiện ích hóa Giao diện Serializable khơng định nghĩa thành phần Nếu lớp thực thi giao diện Serializable lớp có khả hóa Một lớp khả tất lớp khả Giao diện ObjectOutput thừa kế từ giao diện DataOutput hỗ trợ hóa đối tượng Lớp ObjectOuputStream lớp lớp ObjectOuput thực thi giao diện ObjectOutput Nó có nhiệm vụ ghi đối tượng vào luồng cách sử dụng phương thức writeObject(Object obj) Sưu t m b i: www.daihoc.com.vn ObjectInput thừa kế giao diện DataInput định nghĩa phương thức Nó hỗ trợ cho việc hóa đối tượng Phương thức readObject() gọi để giải hóa đối tượng ObjectInputStream định nghĩa gói java.io luồng cài đặt chế đọc trạng thái luồng nhập đối tượng Một vấn đề đặt là: liệu lớp Java có khả hóa? Câu trả lời khơng, khơng cần thiết khơng có ý nghĩa hóa số lớp định Để xác định xem lớp có khả hay khơng ta sử dụng cơng cụ serialver có JDK Hình Hình Với kết cho ta thấy lớp khả Nhưng lớp Java khả chẳng hạn ta thử kiểm tra với lớp java.net.Socket Hình Khi kết hiển thị Class java.net.Socket is not Serializable (Lớp java.net.Socket không khả tuần tự) 1.3 Xây dựng lớp lớp khả Đối với lớp người lập trình định nghĩa ta phải khai báo để báo hiệu cho hệ thống biết có khả hay khơng Một lớp người dùng định nghĩa có khả hóa lớp thực thi giao diện Serializable Trong ví dụ ta định nghĩa lớp Point để lớp có khả hóa public class Point implements Serializable { private double x,y; Sưu t m b i: www.daihoc.com.vn public Point(double x,double y){ this.x=x; this.y=y; } public double getX(){ return x; } public double getY(){ return y; } public void move(double dx,double dy){ x+=dx; y+=dy; } public void print(){ System.out.println("Toa cua diem la:"); System.out.println("Toa x="+x); System.out.println("Toa y="+y); } } 1.4 Cơ chế đọc ghi đối tượng thiết bị lưu trữ Chúng ta biết tất thao tác nhập xuất liệu Java thực chất việc đọc ghi luồng liệu vào luồng liệu Việc đọc ghi đối tượng thiết bị lưu trữ khơng phải ngoại lệ Chúng ta thấy chế qua hình ObjectInputStream FileInputStream Serializable Object File ObjectOuputStream FileOuputStream Sưu t m b i: www.daihoc.com.vn Hình Giả sử đối tượng obj đối tượng khả Bản thân đối tượng khả người lập trình định nghĩa nên thuộc tính khả cho Cơ chế ghi đối tượng tiến hành đơn giản: Trước tiên ta tạo tệp để ghi thông tin, thực chất tạo đối tượng FileOuputStream, sau ta tạo luồng ghi đối tượng ObjectOuputStream gắn với luồng ghi tệp gắn kết hai luồng với Việc ghi đối tượng thực phương thức writeObject() FileOuputStream fos=new FileOuputStream("date.out"); ObjectOuputStream oos=new ObjectOuputStream(fos); Date d=new Date(); oos.writeObject(d); Quá trình gọi q trình hóa Chúng ta nhận thấy để phục hồi lại trạng thái đối tượng ta phải mở tệp để đọc liệu Nhưng ta đọc trực tiếp mà phải thông qua luồng nhập đối tượng ObjectInputStream gắn với luồng nhập tệp tin FileInputStream Việc đọc lại trạng thái đối tượng tiến hành nhờ phương thức readObject() FileInputStream fis=new FileInputStream("date.out"); ObjectInputStream ois=new ObjectInputStream(fis); Date d=(Date)ois.readObject(); Quá trình cịn gọi giải hóa Cơng việc đọc ghi trạng thái đối tượng khả người lập trình định nghĩa tiến hành hoàn toàn tương tự Truyền đối tượng thông qua Socket Chúng ta biết cách ghi đọc đối tượng từ luồng vào tiến trình đơn, xem xét cách truyền đối tượng thông qua Socket Mơ hình lập trình Socket cho giao thức TCP mơ hình phổ biến lập trình mạng Để lập chương trình client/server Java ta cần hai lớp Socket ServerSocket 2.1 Lớp Socket Lớp Socket Java sử dụng client server, có phương thức tương ứng với bốn thao tác Ba thao tác cuối cần cho server để chờ client liên kết với chúng Các thao tác cài đặt lớp ServerSocket Các Socket cho client thường sử dụng theo mơ hình sau: Sưu t m b i: www.daihoc.com.vn Một Socket tạo cách sử dụng hàm dựng Socket() Socket cố gắng liên kết với host xa Mỗi liên kết thiết lập, host xa nhận luồng vào luồng từ Socket, sử dụng luồng để gửi liệu cho Kiểu liên kết gọi song cơng (full-duplex), host nhận gửi liệu đồng thời Ý nghĩa liệu phụ thuộc vào giao thức Khi việc truyền liệu hồn thành, hai phía ngắt liên kết Một số giao thức, HTTP, đòi hỏi liên kết phải bị đóng sau yêu cầu phục vụ Các giao thức khác, chẳng hạn FTP, cho phép nhiều yêu cầu xử lý liên kết đơn 2.2 Lớp ServerSocket Lớp ServerSocket có đủ thứ ta cần để viết server Java Nó có constructor để tạo đối tượng ServerSocket mới, phương thức để lắng nghe liên kết cổng xác định phương thức trả Socket liên kết thiết lập, ta gửi nhận liệu Vòng đời server Một ServerSocket tạo cổng xác định cách sử dụng constructor ServerSocket ServerSocket lắng nghe liên kết đến cổng cách sử dụng phương thức accept() Phương thức accept() phong tỏa client thực liên kết, phương thức accept() trả đối tượng Socket biểu diễn liên kết client server Tùy thuộc vào kiểu server, phương thức getInputStream(), getOuputStream() hai gọi để nhận luồng vào phục vụ cho việc truyền tin với client Server client tương tác theo giao thức thỏa thuận sẵn ngắt liên kết Server, client hai ngắt liên kết Server trở bước hai đợi liên kết 2.3 Truyền nhận liệu mô hình lập trình Socket Việc truyền nhận liệu thực chất thao tác đọc ghi Socket Ta thấy điều qua sơ đồ đây: InputStream Program Socket ObjectOuput Hình Giả sử s đối tượng Socket Nếu chương trình nhận liệu ta lấy liệu từ luồng nhập đến từ Socket: Sưu t m b i: www.daihoc.com.vn InputStream is=s.getInputStream() Để phục hồi trạng thái đối tượng ta gắn kết luồng nhập thô lấy từ Socket với luồng đọc đối tượng ObjectInputStream: ObjectInputStream ois=new ObjectInputStream(is); Khi đối tượng phục hồi lại trạng thái câu lệnh: Object obj=(Object)ois.readObject(); Nếu chương trình gửi liệu ta lấy liệu từ luồng xuất đến từ Socket: ObjectOuput os=s.getObjectOuput(); Để tiến hành ghi đối tượng ta gắn kết luồng xuất thô lấy từ Socket với luồng xuất đối tượng ObjectOuputStream: ObjectOuputStream oos=new ObjectOutputStream(os); Việc truyền đối tượng lúc trở thành công việc đơn giản: oos.writeObject(obj); oos.flush(); 2.4 Ví dụ minh họa Để minh họa kỹ thuật viết server thực phép nhân hai mảng số nguyên với Client gửi hai đối tượng, đối tượng biểu diễn mảng nguyên; server nhận đối tượng này, thực lời gọi phương nhân hai mảng số nguyên với gửi kết trả cho client Trước tiên định nghĩa đối tượng để sử dụng việc truyền đối tượng public class ArrayObject implements java.io.Serializable{ private int[] a=null; public ArrayObject(){ } public void setArray(int a[]){ this.a=a; } public int[] getArray(){ return a; } } Lớp ArrayObject lớp xây dựng để đóng gói mảng số nguyên có khả truyền qua lại mạng Cấu trúc lớp sau: trường thông tin mảng số nguyên a[]; phương thức setArray() thiết lập giá trị cho mảng Phương thức getArray() trả mảng số nguyên từ đối tượng ArrayObject Sưu t m b i: www.daihoc.com.vn Mơ hình client/server tối thiểu phải có hai mođun client server Trong ví dụ ta xây dựng số mođun chương trình sau: Đầu tiên phát triển client Client tạo hai thể đối tượng ArrayObject ghi chúng luồng xuất (thực chất gửi tới server) public class ArrayClient{ public static void main(String[] args)throws Exception{ ObjectOuputStream oos=null; ObjectInputStream ois=null; int dat1[]={3,3,3,3,3,3,3}; int dat2[]={5,5,5,5,5,5,5}; Socket s=new Socket("localhost",1234); oos=new ObjectOuputStream(s.getObjectOuput()); ois=new ObjectInputStream(s.getInputStream()); ArrayObject a1=new ArrayObject(); a1.setArray(dat1); ArrayObject a2=new ArrayObject(); a2.setArray(dat2); ArrayObject res=null; int r[]=new int[7]; oos.writeObject(a1); oos.writeObject(a2); oos.flush(); res=(ArrayObject)ois.readObject(); r=res.getArray(); System.out.println("The result received from server "); System.out.println(); for(int i=0;i

Ngày đăng: 16/08/2012, 15:51

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan