GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH JAVA

30 519 0
GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH 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

GIỚI THIỆU NGƠN NGỮ LẬP TRÌNH JAVA I- Giới thiệu ngơn ngữ Java Java ngơn ngữ lập trình Sun Microsystems, có sức mạnh đầy ấn tượng chủ đề tranh luận nhiều nay, Logo Java- tách cafe bốc khói, Applet Java tràn ngập khắp World Wide Web, ngành công nghiệp chấp nhận với tốc độ chưa có Vậy thực Java gì? Uy lực chúng sao? Đó tất muốn nói bạn, q trình làm thực tập tơi lượm lặt Java phát triển vào thập kỷ 1990, nhà thiết kế James Gosling, nhà lập trình triển khai phiên chương trình dịch ơng Arthur van Hoff Thoạt đầu người ta đặt tên cho ngôn ngữ "Oak", Java xuất phát từ dự án nghiên cứu sản phẩm nhằm mục đích sinh lời, cơng ty Sun đồng ý đưa Java Development Kit (bộ công cụ phát triển Java, bao gồm chương trình dịch hệ thống đáp ứng chạy chương trình) lên Internet miễn phí vào khoảng năm 1995, vòng hai năm sau chúng gặt hái nhiều thành tích lớn Hệ thống Java bao gồm số cấu phần sau: Ngôn ngữ lập trình Java, Java Virtual Machine (Máy ảo Java, thơng dịch) Các thư viện phần mềm kèm hệ thống Chương trình duyệt web HotJava chương trình duyệt web khác thích ứng với Java Với Java, bạn có dịp tiếp cận với phát triển kỳ thú ngành công nghiệp phần mềm Java phát triển nhanh chóng nhờ Web Nhưng thực tế, sức mạnh vốn có Java khơng phải ngơn ngữ lập trình cho Web Những kỹ sư phần mềm tài hãng Sun mang Java vào Web, giải cách tế nhị nhiều vấn đề quan trọng phương pháp phát triển phần mềm mạng hầu hết máy tính hệ điều hành 32 bit Trình biên dịch cơng cụ khác Java Mã byte biên dịch Hệ điều hành (Solaris, Linux, Windows95/NT, MacOS, OS/2) Phần cứng máy tính (Sparc, Pentium, X86, Power PS, ) Hệ thống thực thi Java Máy ảo Java Java API Bức bí mật Java Hệ chủ Java Ngôn ngữ lập trình java Những chương trình nguồn java II- Ưu điểm, nhược điểm hoạt động Java 1- Ưu điểm java là: Sun mô tả ngơn ngữ lập trình đơn giản, hướng đối tượng, kiểu - mạng, biên dịch, mạnh, an tồn, độc lập với cấu trúc, dễ di chuyển, hiệu suất cao, đa luồng, có tính động Những điều khơng dễ giải thích Vậy thì, cụ thể Java làm gì? Về bản, giúp nhà phát triển phần mềm thực việc sau: ♦Thứ nhất: họ xây dựng nên applet Java, trình ứng dụng mini phân phối qua Internet chạy trình duyệt Web hiểu Java Các applet Java tăng cường cho trang Web khả tương tác phong phú tính đa phương tiện tốt so với dùng HTML bình thường Applet hoạt động giống cung cách bạn đặt trang web với siêu văn server máy khách (client) tải trang xuống theo yêu cầu để xem văn đặt theo khuôn dạng Tương tự, bạn viết biên dịch chương trình applet Java đặt tham chiếu URL HTML tới trang web Khi client duyệt qua trang web này, mã nhị phân applet Java tải xuống client tệp văn đồ hoạ chương trình duyệt chứa JVM thực applet máy tính client ♦Thứ hai: nhà phát triển phần mềm xây dựng trình ứng dụng hoàn chỉnh Java, xử lý văn bản, bảng tính, chương trình văn phịng tổng hợp (như Corel làm chẳng hạn) Ưu điểm cách làm trình ứng dụng cần viết lần mà chạy hầu hết loại máy tính ♦Thứ ba: Java đáp ứng khơng tính dễ chuyển mang mà cách xử lý đồng chương trình hệ thống khác Đầu tiên mã nguồn Java biên dịch để sinh mã đối tượng gọi bytecode, bytecode mã nhị phân máy tính tồn thực tế mà loại mã máy kiến tạo, Bạn thực chương trình Java cách chạy chương trình khác gọi Java Virtual Machine JVM, JVM đọc chương trình bytecode thơng dịch biên dịch theo hệ lệnh thực tế, JVM biến tất phần cứng phần mềm trở nên giống mắt chương trình Java Chạy bytecode JVM lý phần mềm Java "viết lần, chạy khắp nơi" ♦Thứ tư: Việc quản lý nhớ: So với ngôn ngữ C C++, chương trình Java quản lý nhớ mức hệ thống người lập trình khơng phải lo lắng chuyện Thư viện thời gian chạy Java giám sát cấu trúc liệu Khi khơng cịn tham chiếu tới cấu trúc liệu khơng thể sử dụng chương trình khơng có cách để đọc ghi Lúc đối tượng việc dọn dẹp nhớ Java hướng tới việc dọn dẹp nhớ tự động Việc dọn dẹp nhớ tự động ảnh hưởng tới tính liên quan đến trình khác chạy sau để giám sát việc sử dụng nhớ Tuy nhiên thực tế rằng, có cân nhắc đáng giá Một hệ thống nhỏ thực dọn dẹp nhớ tự động dẫn tới cải thiện lớn thông qua việc gỡ bỏ loạt lỗi chương trình Java Có thể so sánh, chương trình C++ chịu trách nhiệm quản lý đống (heap) nhớ riêng chúng chúng phải có mã dài hơn, nhiều thời gian gỡ rối chương trình lớn thường dẫn tới lỗi khó phát xử lý việc dọn dẹp nhớ - Java mơi trường độc lập, lợi quan trọng cho phép Java hẳn ngôn ngữ khác, đặc biệt cho hệ thống cần làm việc nhiều môi trường khác nhau, Java môi trường độc lập hệ thống lẫn mức thấp hệ xử lý nhị phân Nó có khả chuyển từ hệ thống máy tính sang hệ thống máy tính khác khơng phụ thuộc vào cấu trúc máy hay hệ điều hành hoạt động máy Compiler (Pentium) Compiler (PowerPC) Compiler (SPARC) Binary File (Pentium) Binary File (PowerPC) Binary File (SPARC) 2- Nhược điểm Java là: Java có tốc độ thực thi chương trình phải thơng qua JVM nên tốc độ chậm so với ngôn ngữ khác Nhưng Java trội tất ngôn ngữ khác Xem sơ đồ bên Java Ứng dụng đa hệ Ứng dụng bảo mật Ứng dụng Web Ứng dụng dựa vào GUI Ứng dụng mạng phân tán Ứng dụng hướng đối tượng Ứng dụng đa luồng Ứng dụng chuyên luồng Java trội tất 3- Hoạt động ứng dụng viết Java - Chương trình xây dựng Java chia làm hai loại: Java Applet Java Application ♦ Hoạt động Java Applet: Java Applet đối tượng thực trình duyệt Web, Java Applet tạo hiệu ứng ứng dụng thông thường Tuy nhiên thông tin cho phép Java thực lại đưa từ trang Web Khi trình duyệt Web truy cập đến trang thơng tin này, Java Applet tải trình duyệt web thực thông qua cấu gọi JVM ♦ Hoạt động Java Application: Là ứng dụng độc lập, tương tự chương trình có EXE COM thơng thường, việc thực dễ việc thực Java Applet chúng khơng phải thơng qua trình duyệt Web - Khi ứng dụng Java thực hiện(sau dịch Java có phần đuôi mở rộng class), JVM tiến hành phân mã *.class thành lệnh JVM thực giống máy PC thao tác với ứng dụng thơng thường Do *.class sau dịch, thực hệ điều hành thơng qua máy tính ảo JVM, JVM xây dựng hầu hết hệ điều hành hệ xử lý có, điều có nghĩa ứng dụng viết Java có đầy đủ điều kiện để phát triển - Giống hầu hết ngơn ngữ lập trình hướng đối tượng khác, Java bao gồm: môi trường, ngôn ngữ, giao diện ứng dụng Java nhiều lớp thư viện Những lớp riêng có đặc tính riêng tái sử dụng lại, điểm mạnh mà Java khác với ngơn ngữ khác Ngồi tính Java cịn có khả xử lý đa luồng Ngơn ngữ thực động nên thích hợp cho ứng dụng mạng Ngồi cịn có đặc tính cần thiết như: hỗ trợ chuỗi, đồ họa, kiểm soát lỗi, hỗ trợ đa luồng, đa phương tiện, làm việc theo mơ hình client/server, linh động hiệu quả,…Các tính thực mà doanh nghiệp tổ chức cần, để đáp ứng xác yêu cầu xử lý thơng tin họ Mơ hình hoạt động ứng dụng viết Java: Mã CT (*.Java) Máy ảo Java(JVM) Mã Bytecode Java (*.class) Java thông dịch (Pentium) Java thông dịch (Power PC) Java thông dịch (SPARC) Java biên dịch(Javax) Hình 1.1 - Các trình duyệt Web(Browser) hỗ trợ cho công việc Java để thông dịch như: ♦ Internet Explorer(IE) hãng Microsoft ♦ Netscape Navigator hãng AOL ♦ HotJava Browser hãng Sun ♦ Ngoài cịn có số cơng cụ hỗ trợ Java thơng qua mơi trường làm việc là: • Java Workshop hãng Sun • Jbuilder nhóm Inprise-Borland ♦ Mơi trường phát triển Java gồm hai phần: Java Compiler (chương trình biên dịch Java – Javax: Lớp dịch chương trình thành lớp class) Java Interpreter(Chương trình thơng dịch Java-java, javax, trình duyệt appletviewer, jview, trình tài liệu javadoc, trình tạo hồ sơ jar….dùng để đưa lên trang Applet) - Java mang sống đến cho WWW mà Web cho tiền thân Oak viễn cảnh sống tốt đẹp Java thấm sâu vào hiểu biết cơng nghiệp này, cịn nhanh DOS Windows thời hoàng kim chúng trước Nhưng thành cơng lâu dài Java khơng có đảm bảo - giống thần đồng nhỏ tuổi, phải trưởng thành nhanh chóng khơng phép đốt cháy giai đoạn Nếu vượt qua được, chứng minh mạng máy tính Các bạn quan tâm tìm hiểu thêm Java thơng qua website http://www.best.com/~pvdl III- Cơ chế truyền nhận Java Các kiến thức Networking Các máy tính chạy mạng Internet truyền thông với dùng Protocol TCP, UDP Mơ hình mạng lớp mơ tả hình vẽ : Application (HTTP,ftp,telnet) Transport (TCP/IP,UDP) Network (IP,.) Link (device driver) Khi bạn viết chương trình Java có truyền thơng qua mạng, điều có nghĩa bạn lập trình lớp application Nhìn chung, bạn không cần quan tâm tới protocol TCP UDP -Thay vậy, bạn dùng lớp package java.net Các lớp cung cấp việc truyền thông qua mạng độc lập hệ thống Tuy nhiên, bạn cần hiểu rõ khác biệt TCP UDP để xác định rõ lớp thư viện Java mà bạn sử dụng Khi hai chương trình muốn truyền liệu cho cách đáng tin cậy, chúng thiết lập connection gửi data qua lại thơng qua connection TCP đảm bảo data gửi từ đầu connection tới đầu không mát thứ tự (nếu không, lỗi thông báo) Ðịnh nghĩa: TCP protocol dựa connection, cung cấp data flow tin cậy máy tính Những ứng dụng yêu cầu kênh truyền point-to-point, đáng tin cậy dùng TCP Hyper Text Transfer Protocol (HTTP), File Transfer Protocol (ftp), Telnet (telnet) ứng dụng đòi hỏi kênh truyền đáng tin cậy Thứ tự gửi nhận phải đảm bảo điều kiện buộc phải có ứng dụng dùng HTTP để đọc từ URL, liệu cần phải nhận theo thứ tự mà gửi đi, khơng thứ đảo lộn lên Tuy nhiên, có ứng dụng khơng địi hỏi độ tin cậy q cao Ðiều lại có lợi hiệu suất Một ví dụ loại kênh truyền lệnh ping Mục đích lệnh ping kiểm tra việc truyền nhận data hai chương trình qua mạng Thực ra, lệnh ping cần biết package bị rơi rớt hay sai thứ tự để xác định chất lượng connection Do kênh truyền đáng tin cậy khơng thích hợp với loại dịch vụ UDP protocol cung cấp việc truyền thông không đảm bảo hai ứng dụng mạng UDP không dựa connection TCP UDP gửi package độc lập với nhau, gọi datagrams, từ ứng dụng tới ứng dụng Việc gửi datagram giống việc gửi thư thông qua bưu điện Thứ tự phân phát không quan trọng không đảm bảo, message độc lập với Ðịnh nghĩa: UDP protocol, gửi package độc lập gọi datagrams, từ máy tới máy khác, không đảm bảo chắn thành công UDP khơng dựa connection TCP Ports: Nói cách tổng quát, máy tính nối mạng connection vật lý mạng Tất liệu gửi cho máy tính thơng qua connection Tuy nhiên, liệu gửi cho ứng dụng khác máy Vậy làm cách máy tính biết ứng dụng nhận liệu gửi đến? Ðiều giải thông qua việc sử dụng Ports, ứng dụng mạng có port tương ứng Dữ liệu truyền qua mạng có kèm theo thơng tin địa nhằm xác định máy tính port đích Mỗi máy tính xác định địa IP 32-bits, IP protocol dùng địa để phân phát liệu cho máy Port xác định số 16-bits, protocol TCP UDP dùng port number để phân phát data tới cho ứng dụng Trong việc truyền nhận data dựa connection, ứng dụng thiết lập connection với ứng dụng khác cách gắn socket cho port number Ðiều có ý nghĩa đăng ký ứng dụng với hệ thống để ứng dụng nhận tất data gửi đến cho port Khơng thể có hai ứng dụng dùng chung port.Trong việc truyền nhận data dựa datagram, datagram chứa port number ứng dụng đích mà gửi tới packet app app app app TCP/IP port port port port port data Ðịnh nghĩa: Các protocol TCP UDP dùng ports để map incoming data cho q trình chạy máy tính Việc sử dụng Socket chương trình Client phần mềm có đơi chút phức tạp ý tưởng hồn tồn giống import java.io.*; import java.net.*; public class EchoTest { public static void main(String[] args) { Socket echoSocket = null; DataOutputStream os = null; DataInputStream is = null; DataInputStream stdIn = new DataInputStream(System.in); try { echoSocket = new Socket("ResearchCC", 7); os = new DataOutputStream(echoSocket.getOutputStream()); is = new DataInputStream(echoSocket.getInputStream()); } catch (UnknownHostException e) { System.err.println("Don't know about host: ResearchCC"); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: ResearchCC"); } if (echoSocket != null && os != null && is != null) { try { String userInput; while ((userInput = stdIn.readLine()) != null) { os.writeBytes(userInput); os.writeByte('\n'); System.out.println("echo: " + is.readLine()); } os.close(); is.close(); echoSocket.close(); } catch (IOException e) { System.err.println("I/O failed on the connection to: ResearchCC"); } } } } Giải thích chương trình : Ba hàng sau khối try phương thức main() buộc phải có Chúng thiết lập socket connetion client-server mở input, outputstream socket tạo ra: echoSocket = new Socket("ResearchCC", 7); os = new DataOutputStream(echoSocket.getOutputStream()); is = new DataInputStream(echoSocket.getInputStream()); Hàng đầu tạo đối tượng Socket, đặt tên echoSocket Socket constructor sử dụng yêu cầu tên máy port number mà ta muốn connect tới Chương trình ví dụ dùng host name ResearchCC Ðối số thứ hai port number Port port mà Echo server listen Hàng thứ hai thứ ba mở output stream input stream socket vừa thiết lập EchoTest đơn cần write tới output stream read từ input stream để truyền liệu với server thông qua socket Nếu bạn chưa quen với stream Java, bạn xem thêm phần Stream đề tài Phần kế đọc từ standard input stream EchoTest hàng lần EchoTest write input text (theo sau newline character) tới output stream : String userInput; while ((userInput = stdIn.readLine()) != null) { os.writeBytes(userInput); os.writeByte('\n'); System.out.println("echo: " + is.readLine()); } Hàng cuối vòng lặp while đọc hàng từ input stream Phương thức readLine() block server echo thông tin trở cho EchoTest Khi readLine() return, EchoTest in hàng thông tin standard output Vòng lặp while tiếp tục, EchoTest đọc input từ user, gửi cho Echo server, nhận trả lời từ server, hiển thị user đánh vào end-of-input character Khi user đánh vào end-of-input character, vòng lặp while kết thúc, chương trình tiếp tục thực thi ba hàng kế: os.close(); is.close(); echoSocket.close(); Ba hàng code đóng input, output stream, rối đóng socket connection tới server Thứ tự thực quan trọng, ta nên đóng stream kết nối với socket trước đóng socket Nhìn chung, bước cần tiến hành để dùng socket phía client sau: Mở socket Mở input stream outputstream ứng với socket Read write tới stream tùy thuộc vào nghi thức server Ðóng stream Ðóng socket Chỉ có bước ba khác client, dựa vào server Các bước lại giống c Sử dụng Socket Server Chương trình Server bắt đầu việc tạo instance lớp ServerSocket để listen port đặc tả Khi thực chương trình Server, ta nên chọn port mà không dành sẵn cho dịch vụ khác : try { serverSocket = new ServerSocket(5000); } catch (IOException e) { System.out.println("Could not listen on port: " + 5000 + ", " + e); System.exit(1); } Bước kế tiếp, Server accept connection request từ client : Socket clientSocket = null; try { clientSocket = serverSocket.accept(); } catch (IOException e) { System.out.println("Accept failed: " + 4444 + ", " + e); System.exit(1); } Sau sinh socket ứng với client yêu cầu connect,server dựa vào socket input, output stream ứng với socket để thực việc read, write liệu Ðiều hoàn tồn giống cách thức mơ tả phần sử dụng socket Client mô tả phần Cụ thể việc sau : Mở input output stream ứng với socket Read write tới socket Trong đề tài, có nhiều client đồng thời đưa connection request với server port mà server listen (port 5000) Có hai cách để giải vấn đề : Các connection request xếp hàng, Server phải accept connection Phục vụ connection request đồng thời việc dùng thread Mỗi thread xử lý connection Ðề tài chọn cách thứ hai để thực hợp lý hơn: user cần phải xử lý bình đẳng Giải thuật cho phần sau : while (true) { accept a connection ; create a thread to deal with the client ; end while Thread sinh read write tới connection ứng với connection cần thiết Các lớp socket sử dụng chương trình: (Phần dành cho người muốn tìm hiểu kỹ đề tài) d Lớp Socket: public Socket(String host, int port) throws UnknownHostException, IOException Hàm constructor Tạo stream socket connect với port đặc tả thông số port, host đặc tả thông số host Ngầm định tạo stream socket (ngồi tạo datagram socket đặc tả thêm thông số) Trong chương trình, thơng số InetAddress lấy việc gọi hàm gethost sau có chuỗi URL chứa chương trình Client public InetAddress getInetAddress() Trả remote IP address mà socket connect tới Từ trị trả này, gọi hàm getHostName từ lớp InetAddress để lấy hostName tương ứng Hàm gọi chương trình server cần lấy hostName client connect với public InputStream getInputStream() throws IOException Trả input stream thực việc đọc liệu từ socket public OutputStream getInputStream() throws IOException Trả output stream thực việc ghi liệu tới socket Lớp ServerSocket public ServerSocket(int port) throws IOException Tạo server socket port đặc tả thông số port Nếu port = tạo server socket port trống Chiều dài hàng đợi lớn cho yêu cầu connection 50 Nếu yêu cầu connection đến hàng đợi đầy, yêu cầu bị từ chối public Socket accept() throws IOException Listen yêu cầu connection socket chấp nhận Phương thức bị block connection thực Public void close() throws IOException Close socket lại (áp dụng cho Socket ServerSocket) Các Stream: Class BufferedInputStream input stream Public BufferedInputStream (InputStream in) Hàm constructor tạo input stream có đệm để đọc data từ input stream khai báo Kích thước buffer ngầm định 512-byte Ta khai báo kích thước buffer constructor khác Class DataInputStream Ứng dụng sử dụng data input stream để đọc kiểu liệu nguyên thủy Java từ input stream lớp dưới, với đặc tính độc lập máy Ứng dụng dùng data outputstream để ghi data mà sau đọc data input stream Public DataInputStream(InputStreamin): Hàm constructor Tạo data input stream để đọc data từ input stream khai báo Trong chương trình, sử dụng InputStream BufferedInputStream sinh từ input stream nhận từ socket tương ứng public final String readLine() throws IOException Ðọc hàng text kế từ data input stream gọi Phương thức đọc thành công bytes từ input stream lớp hết hàng Ký hiệu chấm dứt dòng xác định ký tự sau : ký tự CR ('\r'), ký tự newline ('\n'), ký tự CR theo sau ký tự newline, hay kết thúc stream input Phương thức bị block xảy ba tình sau: ký tự newline đọc, ký tự CR byte liền sau đọc (để xem có phải ký tự newline hay khơng), dị thấy dấu hiệu chấm dứt stream, hay IOException sinh Các kiến thức outputstream, bufferedoutputstream tương tự input stream Class PrintStream Một printstream thực outputstreamfilter, cung cấp phương thức tiện lợi cho việc print kiểu liệu khác public PrintStream(OutputStream out) Xây dựng printstream mà viết output tới outputstream lớp đặc tả public void println(String s) Print chuỗi tới output stream lớp Print Stream gọi hàm e Java Security Các Java-application không thực tính bảo mật Java-applet Với Javaapplication, đọc ghi file, giao tiếp với thiết bị, connect với socket, Nhưng với Java-applet khơng Có nhiều việc mà Java-applet không phép làm, nhiều tài nguyên mà Java-applet nên hạn chế truy xuất Các applet quan hệ tới mơ hình Client/Server cổ điển theo cách : Web server server applet Nó gửi applet tới máy client Máy client máy client chạy thực Ðiều có nghĩa ta browse trang HTML có nhúng applet, máy ta client Ðiều làm rõ việc xác định việc mà applet không phép làm Nếu applet load qua mạng, khơng phép : Ðọc, ghi, xóa, đổi tên file, tạo thư mục, liệt kê nội dung thư mục, kiểm tra tồn file, client file system Khai báo hàm điều khiển mạng nào, định nghĩa lớp client file system, thiết lập connection với chương trình chạy máy khác, máy chứa applet Những điều dẫn đến hạn chế chương trình: đặt Server máy với Client, máy chạy Web server 2.3 Threads, Synchronization Exceptions: a Multithread Có lẽ ta quen thuộc với khái niệm multitasking : khả có nhiều chương trình hoạt động thời điểm Những chương trình multithreaded mở rộng khái niệm mutitasking mức thấp hơn: chương trình chạy nhiều đoạn tính tốn gần lúc (mỗi đoạn tính tốn thường gọi thread) Mỗi thread coi chạy ngữ cảnh riêng biệt: thread có CPU riêng nó, với ghi, nhớ code cho riêng Cũng cần phân biệt khác quan trọng multiple processes multiple threads: thread có tập biến riêng nó, cịn processes dùng chung data chương trình mà chúng thuộc Tuy nhiên, cho phép tạo overhead thấp tạo xóa thread so với việc sinh process Ðiều giải thích tất hệ điều hành đại support multithreading Có lẽ Java sức mạnh lớn việc hướng đối tượng khả multithreading Ðiều đặc biệt support multithreading ngôn ngữ thư viện lớp nên việc sử dụng đặc tính dễ dàng nhiều Việc chạy chương trình single-thread thích hợp cho chương trình nhỏ, làm nhiệm vụ đơn, thực tế yêu cầu tốn conference khơng thể : chương trình đợi User nhập câu Chat, chọn User để gửi câu chat listen message đến từ Server Ðiều cần thực đồng thời Chính lý mà việc sử dụng multithreading để thực chương trình bắt buộc Trong Java, có hai cách để tạo lớp thực thread : Tạo lớp extends lớp Thread class className extends Thread{ public void run(){ //Thread body of execution } } Khi gọi phương thức start(), phương thức run() tự động gọi : className myClass = new className(); myClass.start(); Tạo lớp implements Runnable interface class className implements Runnable{ public void run(){ // Thread body of execution } } Ðể chạy thread loại này, cần pass instance lớp cho đối tượng Thread mới: className myClass = new className(); new Thread(myClass).start(); Các trạng thái thread, giống trạng thái trình, mơ tả hình vẽ : stop start Block On I/O I/O complete wait notify resume suspend sleep blocked runnable new deal done sleeping Mỗi thread có mức ưu tiên Theo ngầm định, thread thừa hưởng mức ưu tiên thread cha Ta tăng giảm mức ưu tiên thread cách dùng phương thức setPriority Mức ưu tiên set khoảng giá trị từ MIN_PRIORITY (được định nghĩa lớp Thread) MAX_PRIORITY (bằng 10) NORM_PRIORITY định nghĩa Khi Thread-Scheduler có hội nhận thread mới, chọn thread có mức ưu tiên cao trạng thái runnable Việc áp dụng threads hiệu thiết kế Client với đặc tính : ln thực "đồng thời" hai nhiệm vụ: vừa listen data Server gửi cho, vừa tương tác với user Ngoài Server buộc phải thực multithreading, thread quản lý connection với client b Synchronization (xử lý crictical section) Như nói trên, khả multithread Java support mang lại nhiều lợi điểm Tuy nhiên, điều xảy hai thread truy xuất làm thay đổi đối tượng? Lý thuyết chung vấn đề : phải đảm bảo trình thread truy xuất sửa đổi đối tượng dùng chung, khơng bị interrupted Ðể giải vấn đề (crictical section), môn hệ điều hành có số phương pháp: dùng semaphore, giải thuật Peterson,monitors,testandset Tuy nhiên, Java xử lý vấn đề synchronize access tới đối tượng dùng chung, hình thức sử dụng monitors, nhiên việc sử dụng Java lại dễ dàng, vấn đề khai báo Ðơn giản ta việc khai báo phương thức mà thread gọi để truy xuất đối tượng dùng chung với từ khóa : synchronized public synchronized void changeObject( .) { } Sau cấu làm việc synchronization: Nếu lớp có hay nhiều phương thức synchronized, đối tượng lớp nhận hàng đợi, hàng đợi giữ tất thread đợi tới lượt thực thi phương thức synchronized Có khả để thread xếp vào hàng : gọi phương thức synchronized thread khác sử dụng đối tượng dùng chung, thread gọi wait dùng đối tượng Khi lần gọi phương thức synchronized trả về, hay phương thức khác gọi wait, thread khác nhận quyền truy xuất tới đối tượng Scheduler ln chọn thread có mức ưu tiên cao thread hàng Nếu thread bị đặt vào hàng gọi wait, cần "unfrozen" việc gọi notify trước scheduled để thực thi tiếp Các qui luật schedule phức tạp, sử dụng chúng lại đơn giản Chỉ cần thực ba qui tắc sau: Nếu hai hay nhiều thread sửa đổi đối tượng, khai báo phương thức thực việc sửa đổi với từ khóa synchronized Nếu thread đợi thay đổi trạng thái đối tượng, nên đợi bên đối tượng, khơng phải bên ngoài, cách vào phần thực thi phương thức synchronized gọi wait Bất phương thức thay đổi trạng thái đối tượng, nên gọi notify(trước) Ðiều làm thread đợi có hội Vấn đề buộc phải xử lý đề án số phương thức Trong phần thực Server, connection ứng với client thread quản lý Giả sử có user_1 (client_1) khỏi nhóm hành mình, thread_1 xử lý connection ứng với client cần gọi hàm để xóa user khỏi nhóm Nếu q trình hàm xóa user khỏi nhóm thực thi mà thread bị interrupted, thread khác, thread_2, ứng với client_2 (user_2) nhóm với user_1, muốn gửi câu chat cho user_1 Sau thread_1 lại dành quyền điều khiển thread_1, thực xóa user_1 khỏi nhóm cũ Thread_2 sau lại tiếp tục gửi câu chat cho user_1 lúc khơng cịn nhóm với Vì buộc phải khai báo synchronized cho hàm xóa user khỏi nhóm Cịn số tình khác phần thực server buộc phải sử dụng synchronization, mô tả kỹ phần sau (phần 2) c Exceptions Java support việc quản lý exception, đặc trưng quan trọng tạo nên sức mạnh chương trình Bất lỗi run-time xảy phương thức, throw exception, giúp đoạn code chứa phương thức khắc phục lỗi hay có chủ ý, khơng làm down tồn hệ thống Ðiều đặc biệt quan trọng chương trình ta chạy thời điểm với ứng dụng quan trọng khác môi trường multitasking Mặc dù hệ điều hành đóng chương trình ta mà không ảnh hưởng đến ứng dụng khác, điều 100% Việc quản lý exception tâm đặc biệt thực Server, Server chương trình cần phải chạy background, khơng thể bị down Java code dị lỗi cho run-time system lỗi Thường exception throw làm cho thread gây lỗi kết thúc, thơng báo lỗi in Nếu bạn muốn tự quản lý exception, bạn sử dụng phát biểu catch để bẫy exception Ðoạn code để bẫy exception xảy có dạng sau: Try{ // some code which might throw an exception }catch (exceptionType name){ //Handle the exception } Phần code khối try thực thi exception tạo Thực ra, bạn dùng vài phát biểu catch khác để bẫy exception khác Bất kỳ phần code sau exception throw không thực thi tiếp Nếu phần code buộc phải thực thi, bạn sử dụng khối finally 3-CƠ SỞ DỮ LIỆU 3.1 JDBC: Java có hai hướng: ngơn ngữ lập trình hệ thống client/server chương trình tự động download chạy máy cục (thay máy server) Một thư viện API Java Database Connectivity hay JDBC Mục đích kết nối chặt chẽ ngôn ngữ Java với sở liệu a JDBC ? JDBC liên quan đến vài thứ, tùy thuộc vào ngữ cảnh: Ðó định rõ cho việc dùng tài nguyên data application applet Java Ðó API cho việc sử dụng JDBC cấp thấp Ðó API cho việc tạo driver JDBC cấp thấp, thực kết nối chuyển đổi tài nguyên data Ðó X/Open SQL Call Level Interface (CLI), định nghĩa làm tác động qua lại client/server thực thi cho hệ thống sở liệu Java định nghĩa hướng cho việc nhận liệu applicaton applet driver JDBC cấp thấp tiến hành việc chuyển sở liệu riêng biệt đến giao diện JDBC cấp cao Giao diện sử dụng người phát triển không cần lo lắng cú pháp sở liệu đặc trưng tiến hành kết nối query sở liệu khác JDBC gói (package), giống gói khác Java Nhưng thơng thường khơng phải phần phát triển phần mềm chuẩn, chẳng hạn JDK Các hướng có JDBC driver cần thiết cho việc kết nối sở liệu mà khơng địi hỏi cài đặt client Một driver JDBC nạp xuống applet JDBC chấp nhận phần mềm sở liệu hãng sau : ♦Borland International, Inc ♦Bulletproof ♦Cyber SQL Corporation ♦Dharma Systems, Inc ♦Gupta Corporation ♦IBM ‘ s Database (DB2) ♦Imaginary (mSQL) ♦Imformix Software, Inc ♦Intersoft ♦Intersolv ♦Object Design, Inc ♦Open Horizon ♦OpenLink Software ♦ Oracle Corporation ♦Persistence Software ♦Presence Information Design ♦PRO-C, Inc ♦Recital Corporation ♦Rogne Wave Software, Inc ♦SAS Institute, Inc b Cấu trúc JDBC : Có lý để tách rời lập trình cấp thấp từ giao diện ứng dụng cấp cao Lập trình cấp thấp JDBC Driver JDBC uyển chuyển : tài nguyên liệu cục hay sở liệu từ xa Việc thực thi kết nối thực tài nguyên liệu / sở liệu dành cho bên JDBC driver Cấu trúc JDBC bao gồm khái niệm sau : Mục tiêu JDBC giao tiếp độc lập DBMS, "cơ cấu truy xuất sở liệu SQL chung ", giao tiếp giống cho tất tài nguyên liệu khác Người lập trình viết giao diện sở liệu : sử dụng JDBC, chương trình truy xuất tài ngun liệu Lớp DriverManager sử dụng để mở kết nối tới sở liệu qua JDBC driver, driver phải đăng ký với DriverManger trước việc kết nối hình thành Khi kết nối gắn vào, DriverManager lựa chọn từ danh sách driver tương thích với kiểu xác sở liệu kết nối Sau việc kết nối hình thành, việc gọi query lấy kết làm trực tiếp với JDBC driver JDBC driver phải thực thi lớp để xử lý hàm cho sở liệu riêng biệt, đặc điểm kỹ thuật JDBC đảm bảo driver tiến hành dự kiến Ðiều cốt yếu người phát triển có JDBC driver cho sở liệu không cần thiết phải lo lắng việc phải thay đổi đoạn mã cho chương trình Java kiểu sở liệu khác sử dụng ( giả sử JDBC driver cho sở liệu khác có sẵn) Ðiều đặc biệt hữu dụng cho sở liệu phân bố JDBC sử dụng cú pháp URL cho việc định sở liệu Ví dụ kết nối tới sở liệu mSQL có dạnh sau : jdbc : msql://mydatabase.server.com:1234/testdb Câu lệnh định "phương tiện" sử dụng (jdbc), kiểu sở liệu (msql), tên server, cổng (1234), sở liệu kết nối tới (testdb) Kiểu liệu SQL ánh xạ vào kiểu nội Java Khi kiểu nội không miêu tả Java, lớp có sẵn việc nhận liệu kiểu Ví dụ, kiểu Date JDBC Một người phát triển gán field ngày sở liệu với lớp ngày JDBC, sau người phát triển sử dụng phương thức lớp Date để hiển thị hay tiến hành thao tác JDBC bao gồm đối tượng nhị phân, nhận lưu trữ ảnh, nhạc, tài liệu, hay liệu nhị phân khác sở liệu với JDBC 3.2 ODBC JDBC : ODBC JDBC chia sẻ nguồn gốc chung : hai tảng X/OPEN gọi giao tiếp cho SQL Mặc dù JDBC driver bật cho nhiều sở liệu, viết chương trình Java sử dụng ODBC driver có Trên thực tế Javasoft Intersolv có viết Java driver - cầu nối JDBC - ODBC - cho phép người phát triển sử dụng ODBC driver có chương trình Java Tuy nhiên JDBC - ODBC Brigde đói hỏi cài đặt client, hay nơi mà chương trình Java thực chạy, Bridge phải gọi phương thức nội để chuyển từ ODBC sang JDBC Chỉ có Java driver 100% download thơng qua mạng với Java applet, không cần cài đặt lại Nhiệm vụ ODBC driver tương tự JDBC driver Trên thực tế JDBC - ODBC Brigde thật JDBC driver chuyển đến từ ODBC cấp thấp Khi JDBC driver cho sở liệu sẵn có, dễ dàng bật từ ODBC driver đến JDBC driver với vài thay đổi, có, thay đổi đoạn mã chương trình Java 3.3 Sử dụng JDBC driver : Muốn sử dụng JDBC driver, phải có JDBC driver (vì chúng khơng kèm với gói có Java API ) Đừng quên cần ODBC driver Nếu server sở liệu, muốn sử dụng JDBC, sử dụng gói ODBC driver với Microsoft Access Sử dụng JDBC -ODBC Bridge, viết Java application giao tiếp với sở liệu Access Không may, applet bắt buộc giới hạn bảo mật nên không cho phép truy xuất đĩa cục bộ, ODBC driver khơng làm việc phạm vi applet (trên trình duyệt Web) Tuy nhiên bây giờ, với thay đổi cơng nghệ có khả sử dụng JDBC - ODBC Bridge Sử dụng ODBC driver chương trình Java địi hỏi cài đặt lại ODBC driver JDBC - ODBC Bridge máy client Ngược lại, JDBC driver lớp Java download động qua mạng với file chứa applet gọi Ðăng ký gọi JDBC driver : + Sau cài đặt lớp JDBC, muốn sử dụng JDBC driver phải import.java.sql.* vào chương trình Java Những lớp JDBC có chứa thành phần cần thiết cho JDBC driver, chúng phục vụ người đứng mã cấp thấp JDBC driver JDBC API cung cấp giao diện dễ sử dụng cho việc giao tiếp với tài nguyên liệu, độc lập với driver mà sử dụng 3.4 Sử dụng JDBC để truy xuất sở liệu : Trước truy xuất tới sở liệu ODBC Window95/98/Me hay WinNT/Win2000 Server, ta phải đăng ký với bảng điều khiển driver ODBC Dưới Window95/98/Me, icon ODBC chương trình Control Panel Cịn WinNT, tìm thấy Start menu Nhấp đơi chuột vào icon ODBC, sau chọn mục "Add" Sau chọn driver sở liệu (ở ta chọn Microsoft dBase Driver) nhấp vào "OK" Ðánh tên sở liệu vào Data Source Name Description, chọn mục "Select" để cập nhật chọn a Kết nối tới Cơ sở liệu: Tất đối tượng sở liệu phương thức đặt gói java.sql, ta phải import gói java.sql.* vào chương trình sử dụng JDBC Ðể kết nối tới sở liệu ODBC, trước tiên ta phải load cầu nối driver JDBC_ODBC: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Phát biểu load driver tạo đối tượng lớp Sau đó, để kết nối tới phần sở liệu, ta phải tạo đối tượng lớp Connection, sở liệu sử dụng cú pháp URL: String url="jdbc:odbc:Subname"); Connection conn=create.getConnection(url); Subname Data Source name mà ta đăng ký Control Panel.Cú pháp URL biến đổi hoàn toàn cho kiểu khác sở liệu jdbc.Subprotocol.Subname Những chữ minh họa cho protocol kết nối luôn jdbc Subprotocol ghi rõ odbc Nó định nghĩa chế kết nối cho lớp sở liệu Nếu ta kết nối tới Server sở liệu máy khác, ta ghi rõ tên máy, Subprotocol UserName, password phần chuỗi Connection b Truy xuất Cơ sở liệu java: Một kết nối tới sở liệu, điều ta địi hỏi thơng tin tên bảng, tên cột, nội dung cột, ta chạy SQL mà khơng cần phải truy vấn đến sở liệu, thêm vào, sửa chữa lại nội dung Các đối tượng mà ta sử dụng để thu thông tin từ sở liệu là: ♦DatabaseMetaData: thông tin đầy đủ sở liệu: tên bảng, tên mục bảng, tên sản phẩm sở liệu, version hoạt động cung cấp sở liệu ♦ ResultSet: thông tin bảng hay kết truy vấn Ta truy xuất tới hàng liệu hàng, truy xuất tới cột nhiều cách khác ♦ResultSetMetaData: thông tin tên cột, kiểu cột đối tượng ResultSet Trong đối tượng có số lượng lớn phương thức hướng dẫn ta lấy thơng tin chi tiết phần tử sở liệu Có vài phương thức đối tượng cho ta thông tin đầy ý nghĩa sở liệu ta c Ðối Tượng ResultSet: Ðối tượng ResultSet đối tượng quan trọng JDBC Nó trừu tượng hóa cần thiết bảng tổ chức chiều rộng có chiều dài khơng biết trước Hầu tất phương thức, kết truy vấn trả liệu ResultSet Nó liên quan đến số tên cột mà ta truy vấn tên Nó cịn gồm tên hàng mà ta di chuyển suốt từ xuống dãy lần Trước dùng ResultSet, ta cần phải biết xem có cột liên quan đến Thơng tin cất đối tượng ResultSetMetaData ResultSet results; ResultSetMetaData rsmd; rsmd=results.getMetaData(); numcols=rsmd.getColumnCount(); Khi ta thu ResultSet, tới hàng Ta sử dụng phương thức next() để thu thêm hàng lại, phương thức trả False khơng cịn hàng Từ đem liệu từ sở liệu, có thể, phát biệt lệ Ta phải đặt hàm lấy kết khối try try { rsmd= results.getMetaData(); //lấy liệu từ kho MetaData ResultSetMetaData rsmd=results.getMetaData(); int numCols=rsmd.getColumnCount();//tạo biến đếm số cột boolean more=results.next(); //tạo biến cho biết cột hết chưa while(more) for(j=1;j

Ngày đăng: 05/10/2013, 21:20

Từ khóa liên quan

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

Tài liệu liên quan