已阅读5页,还剩227页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计基础教程,第1章 Java 程序设计概述 第2章 Java基本的程序设计结构 第3章 类和对象 第4章 继承、接口和内部类 第5章 Java API 第6章 Java 程序设计概述 第7章 多线程 第8章 文件和流 第9章 异常处理 第10章 Java网络编程 第11章 Java Applet基础 第12章 常见数据结构的Java实现 第13章 Java数据库连接-JDBC 第14章 Java多媒体编程:图形、图像和声音,第10章 Java网络编程,10.1 网络编程基础知识 10.2 URL及应用示例 10.3 InetAdress类 10.4 基于套接字的低层次Java网络编程 10.5 UDP数据报,10.1网络编程基础知识,网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。,10.1.1网络基础知识,目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。,10.1.2网络基本概念,IP地址:标识计算机等网络设备的网络地址,由四个8位的二进制数组成,中间以小数点分隔。如: 和 0 主机名(hostname):网络地址的助记名,按照域名进行分级管理。如: ,端口号(port number):网络通信时同一机器上的不同进程的标识。如80、21、23、25,其中11024为系统保留的端口号 服务类型(service):网络的各种服务。 http, telnet, ftp, smtp 在Internet上IP地址和主机名是一一对应的,通过域名解析可以由主机名得到机器的IP,由于机器名更接近自然语言,容易记忆,所以使用比IP地址广泛,但是对机器而言只有IP地址才是有效的标识符。,10.1.3传输协议:TCP、UDP,尽管TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层同时存在TCP和UDP两个协议。 TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。,UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。,两种协议简单比较,使用UDP时,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。对于TCP协议,由于它是一个面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中多了一个连接建立的时间。 使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。 总之,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。相比之下UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。,10.2 URL及应用示例,Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理。例如Java程序可以每隔一定时间读取某结点提供的最新数据,并以图表的形式显示出来。 在编程处理上,一般先生成一个URL类型的对象,然后用Java中相应的方法(method)获取该对象所代表的资源。,10.2.1统一资源定位器URL,URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。 URL是最为直观的一种网络定位方法。使用URL符合人们的语言习惯,容易记忆,所以应用十分广泛。而且在目前使用最为广泛的TCP/IP中对于URL中主机名的解析也是协议的一个标准,即所谓的域名解析服务。使用URL进行网络编程,不需要对协议本身有太多的了解,功能也比较弱,相对而言是比较简单的,所以在这里我们先介绍在Java中如何使用URL进行网络编程来引导读者入门。,10.2.2 URL的组成,URL的一般格式为(带方括号的为可选项): protocol:/ hostname:port / path / ;parameters?query#fragment 协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gopher、file等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如: :80/WebApplication1/WebForm1.aspx?name=tom&age=20#resume,格式说明,1、protocol(协议):指定使用的传输协议,下表列出 protocol 属性的有效方案名称。 最常用的是HTTP协议,它也是目前WWW中应用最广的协议。 file 资源是本地计算机上的文件。格式file:/ ftp 通过 FTP访问资源。格式 FTP:/ gopher 通过 Gopher 协议访问该资源。 http 通过 HTTP 访问该资源。 格式 HTTP:/,https 通过安全的 HTTPS 访问该资源。 格式 HTTPS:/ mailto 资源为电子邮件地址,通过 SMTP 访问。 格式 mailto: MMS 通过 支持MMS(流媒体)协议的播放该资源。(代表软件:Windows Media Player)格式 MMS:/ ed2k 通过 支持ed2k(专用下载链接)协议的P2P软件访问该资源。(代表软件:电驴) 格式 ed2k:/ Flashget 通过 支持Flashget:(专用下载链接)协议的P2P软件访问该资源。(代表软件:快车) 格式 Flashget:/ thunder 通过 支持thunder(专用下载链接)协议的P2P软件访问该资源。(代表软件:迅雷) 格式 thunder:/ news 通过 NNTP 访问该资源。,2、hostname(主机名):是指存放资源的服务器的域名系统 (DNS) 主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:usernamepassword)。 3、:port(端口号):整数,可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http的默认端口为80。如果输入时省略,则使用默认端口号。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项。,4、path(路径):由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。 5、;parameters(参数):这是用于指定特殊参数的可选项。 6、?query(查询):可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。 7、fragment,信息片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。,10.2.3创建一个URL,为了表示URL, 中实现了类URL。Java提供了四种创建URL对象的形式,通过下面的构造方法来初始化一个URL对象: 1) public URL (String spec); 通过一个表示URL地址的字符串,构造一个URL对象。 URL urlBase=new URL(“http:/www. 263.net/“),2) public URL(URL context, String spec); 通过基准URL和文件名或路径相对URL,构造一个URL对象。 URL net263=new URL (“/“); URL index263=new URL(net263, “index.html“) 3) public URL(String protocol, String host, String file); 通过协议,主机名,文件名或路径,构造一个URL对象。 new URL(“http“, ““, “/pages/G. html“);,4) public URL(String protocol, String host, int port, String file); 通过协议,主机名,端口号,文件名或路径,构造一个URL对象。 URL gamelan=new URL(“http“, ““, 80, “Pages/Gwork.html“);,注意:类URL的构造方法都声明抛弃非运行时例外(MalformedURLException),因此生成URL对象时,我们必须要对这一例外进行处理,通常是用try-catch语句进行捕获。格式如下: try URL myURL= new URL() catch (MalformedURLException e) /exception handler code here ,10.2.4解析一个URL,一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性: public String getProtocol() 获取该URL的协议名。 public String getHost() 获取该URL的主机名。 public int getPort() 获取该URL的端口号,如果没有设置端口,返回-1。 public String getFile() 获取该URL的文件名。,public String getRef() 获取该URL在文件中的相对位置。 public String getQuery() 获取该URL的查询信息。 public String getPath() 获取该URL的路径 public String getAuthority() 获取该URL的权限信息 public String getUserInfo() 获得使用者的信息 public String getRef() 获得该URL的锚,【例10-1】生成一个URL对象,并获取它的各个属性。,import .*; public class ParseURL public static void main(String args) throws Exception URL Aurl = new URL(“:80/docs/books/“); URL tuto = new URL(Aurl, “ro.html#DOWNLOADING“); System.out.println(“protocol=“ + tuto.getProtocol(); System.out.println(“host =“ + tuto.getHost(); System.out.println(“filename=“ + tuto.getFile(); System.out.println(“port=“ + tuto.getPort(); System.out.println(“ref=“ + tuto.getRef(); System.out.println(“query=“ + tuto.getQuery(); System.out.println(“path=“ + tuto.getPath(); System.out.println(“UserInfo=“ + tuto.getUserInfo(); System.out.println(“Authority=“ + tuto.getAuthority(); ,程序的执行结果如下所示:,10.2.5从URL读取WWW网络资源,当我们得到一个URL对象后,就可以通过它读取指定的WWW资源。这时我们将使用URL的方法openStream(),其定义为: InputStream openStream(); 方法openSteam()与指定的URL建立连接并返回InputStream类的对象,以便从这一连接中读取数据。,【例10-2】读取网络URL资源。,import java.io.BufferedReader; import java.io.InputStreamReader; import .URL; public class URLReader public static void main(String args) throws Exception / 声明抛出所有例外 URL tirc = new URL(“/ /“); / 构建一URL对象 BufferedReader in = new BufferedReader(new InputStreamReader(tirc .openStream();,/ 使用openStream得到一输入流并由此构造一个BufferedReader对象 String inputLine; while (inputLine = in.readLine() != null) / 从输入流不断的读数据,直到读完为止 System.out.println(inputLine); / 把读入的数据打印到屏幕上 in.close(); / 关闭输入流 ,程序执行后,会根据指定的URL地址/生成一个URL对象,然后调用此URL对象的openStream()方法获取URL资源,生成in输入流,在while循环中读取输入流,调用System.out的println()方法,把读入的数据流打印到屏幕上。在这个例子中,就是把URL资源对应的页面文件源代码输出到屏幕上。,10.2.6通过URLConnetction连接WWW,通过URL的方法openStream(),我们只能从网络上读取数据,如果我们同时还想输出数据,例如向服务器端的CGI程序发送一些数据,我们必须先与URL建立连接,然后才能对其进行读写,这时就要用到类URLConnection了。,类URLConnection也在包中定义,它表示Java程序和URL在网络上的通信连接。当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的URLConnection对象。 下面的例子程序中首先生成一个指向地址/ 的对象,然后用openConnection()打开该URL对象上的一个连接,返回一个URLConnection对象。如果连接过程失败,将产生IOException。,【例10-4】 import java.io.IOException; import .MalformedURLException; import .URL; import .URLConnection; public class ep10_4 public static void main(String args) try URL netchinaren = new URL(“/index.shtml“); URLConnection tc = netchinaren.openConnection(); catch (MalformedURLException e) /创建URL()对象失败 / catch (IOException e) /openConnection()失败 / ,类URLConnection提供了很多方法来设置或获取连接参数,程序设计时最常使用的是getInputStream()和getOurputStream(),其定义为: InputSteram getInputSteram(); OutputSteram getOutputStream(); 通过返回的输入/输出流我们可以与远程对象进行通信。,10.3 InetAdress类,我们已经学习过Internet上的主机有两种方式表示地址: 域名: IP地址:00 包中的InetAddress类对象含有一个Internet主机的域名和IP地址如: /10 域名比较容易记忆,当我们在连接网络输入一个主机的域名后,域名服务器(DNS)负责将域名转换成IP地址,这样我们就和主机建立了连接。,1获取Internet主机的地址,我们可以使用InetAddress类的静态方法getByname(String s)将一个域名或者一个IP地址传递给该方法的参数s,获得一个InetAdress的对象该对象就会包含如下信息: /0, 另外 InetAddress类中含有两个实例方法: public String getHostName()获取域名 public String getHostAddress()获得IP地址,2获取本地主机地址,使用InetAddress类的静态方法,getLocalHost()获得的对象中包含我们本机的域名和IP地址。,10.4基于套接字的低层次Java网络编程,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。,10.4.1 Socket通讯,在传统的UNIX环境下可以操作TCP/IP协议的接口不止Socket一个,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。 说Socket编程是低层次网络编程并不等于它功能不强大,恰恰相反,正因为层次低,Socket编程比基于URL的网络编程提供了更强大的功能和更灵活的控制,但是却要更复杂一些。由于Java本身的特殊性,Socket编程在Java中可能已经是层次最低的网络编程接口,在Java中要直接操作协议中更低的层次,需要使用Java的本地方法调用(JNI),在这里就不予讨论了。,10.4.2 Socket通讯的一般过程,前面已经提到Socket通常用来实现C/S结构。 使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。,工作过程包含以下四个基本的步骤: (1) 创建Socket; (2) 打开连接到Socket的输入/出流; (3) 按照一定的协议对Socket进行读/写操作; (4) 关闭Socket. 第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。 以上4个步骤是针对TCP传输而言的,使用UDP进行传输时略有不同,在后面会有具体讲解。,10.4.3创建Socket,java在包中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。其构造方法如下: Socket(InetAddress address, int port); Socket(InetAddress address, int port, boolean stream); Socket(String host, int prot); Socket(String host, int prot, boolean stream);,Socket(SocketImpl impl) Socket(String host, int port, InetAddress localAddr, int localPort) Socket(InetAddress address, int port, InetAddress localAddr, int localPort) ServerSocket(int port); ServerSocket(int port, int backlog); ServerSocket(int port, int backlog, InetAddress bindAddr) 其中address、host和port分别是双向连接中另一方的IP地址、主机名和端口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和bindAddr是本地机器的地址(ServerSocket的主机地址),impl是socket的父类,既可以用来创建serverSocket又可以用来创建Socket。count则表示服务端所能支持的最大连接数。,例如: Socket client = new Socket(“127.0.01.“, 80); ServerSocket server = new ServerSocket(80); 注意,在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。01023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。 在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。,10.4.4客户端的Socket,【例10-6】 一个典型的创建客户端Socket的过程。 import java.io.IOException; import .Socket; public class ep10_6 public static void main(String args) try Socket socket = new Socket(““, 4700); / 是TCP/IP协议中默认的本机地址 catch (IOException e) System.out.println(“Error:“ + e); 这是最简单的在客户端创建一个Socket的一个小程序段,也是使用Socket进行网络通讯的第一步,程序相当简单,在这里不作过多解释了。在后面的程序中会用到该小程序段。,10.4.5服务器端的ServerSocket,【例10-7】一个典型的创建Server端ServerSocket的过程。 import java.io.IOException; import .ServerSocket; import .Socket; public class ep10_7 public static void main(String args) ServerSocket server = null; try server = new ServerSocket(4700); /创建一个ServerSocket在端口4700监听客户请求 catch (IOException e) System.out.println(“can not listen to :“ + e); Socket socket = null; try socket = server.accept(); /accept()是一个阻塞的方法,一旦有客户请求,它就会返回一个Socket对象用于同客户进行交互 catch (IOException e) System.out.println(“Error:“ + e); ,以上的程序是Server的典型工作模式,只不过在这里Server只能接收一个请求,接受完后Server就退出了。实际的应用中总是让它不停的循环接收,一旦有客户请求,Server总是会创建一个服务线程来服务新来的客户,而自己继续监听。程序中accept()是一个阻塞函数,所谓阻塞性方法就是说该方法被调用后,将等待客户的请求,直到有一个客户启动并请求连接到相同的端口,然后accept()返回一个对应于客户的socket。这时,客户方和服务方都建立了用于通信的socket,接下来就是由各个socket分别打开各自的输入/输出流。,10.4.6打开输入/出流,类Socket提供了方法getInputStream ()和getOutStream()来得到对应的输入/输出流以进行读/写操作,这两个方法分别返回InputStream和OutputSteam类对象。为了便于读/写数据,我们可以在返回的输入/输出流对象上建立过滤流,如DataInputStream、DataOutputStream或PrintStream类对象,对于文本方式流对象,可以采用InputStreamReader和OutputStreamWriter、PrintWirter等处理。,10.4.7关闭Socket,每一个Socket存在时,都将占用一定的资源,在Socket对象使用完毕时,要其关闭。关闭Socket可以调用Socket的Close()方法。在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出该首先关闭,然后再关闭Socket。 os.close(); is.close(); socket.close(); 尽管Java有自动回收机制,网络资源最终是会被释放的。但是为了有效的利用资源,建议读者按照合理的顺序主动释放资源。,10.4.8简单的Client/Server程序设计,下面我们给出一个用Socket实现的客户和服务器交互的典型的C/S结构的演示程序,读者通过仔细阅读该程序,会对前面所讨论的各个概念有更深刻的认识。程序的意义请参考注释。,10.4.9支持多客户的client/server程序设计,前面提供的Client/Server程序只能实现Server和一个客户的对话。在实际应用中,往往是在服务器上运行一个永久的程序,它可以接收来自其他多个客户端的请求,提供相应的服务。为了实现在服务器方给多个客户提供服务的功能,需要对上面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。 客户端的程序和上面程序是完全一样的,读者如果仔细阅读过上面的程序,可以跳过不读,把主要精力集中在Server端的程序上。,10.5 UDP数据报,前面在介绍TCP/IP协议的时候,我们已经提到,在TCP/IP协议的传输层除了TCP协议之外还有一个UDP协议,相比而言UDP的应用不如TCP广泛,几个标准的应用层协议HTTP,FTP,SMTP使用的都是TCP协议。但是,随着计算机网络的发展,UDP协议正越来越来显示出其威力,尤其是在需要很强的实时交互性的场合,如网络游戏,视频会议等,UDP更是显示出极强的威力,下面我们就介绍一下Java环境下如何实现UDP网络传输。,10.5.1什么是Datagram,所谓数据报(Datagram)就跟日常生活中的邮件系统一样,是不能保证可靠的寄到的,而面向链接的TCP就好比电话,双方能肯定对方接受到了信息。在本章前面,我们已经对UDP和TCP进行了比较,在这里再稍作总结: TCP:可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大。 UDP:不可靠,差错控制开销较小,传输大小限制在64K以下,不需要建立连接。 总之,这两种协议各有特点,应用的场合也不同,是完全互补的两个协议,在TCP/IP协议中占有同样重要的地位,要学好网络编程,两者缺一不可。,10.5.2 DatagramSocket、DatagramPacket,包中提供了两个类DatagramSocket和DatagramPacket用来支持数据报通信,DatagramSocket用于在程序之间建立传送数据报的通信连接,DatagramPacket则用来表示一个数据报。先来看一下DatagramSocket的构造方法: DatagramSocket(); DatagramSocket(int prot); DatagramSocket(int port, InetAddress laddr); 其中,port指明socket所使用的端口号,如果未指明端口号,则把socket连接到本地主机上一个可用的端口。laddr指明一个可用的本地地址。给出端口号时要保证不发生端口冲突,否则会生成SocketException类例外。,10.5.3基于UDP的简单的Client/Server程序设计,有了上面的知识,我们就可以来构件一个基于UDP的C/S 网络传输模型 1. 客户方程序 QuoteClient.java 2. 服务器方程序:QuoteServer.java 3. 程序QuoteServerThread.java,10.5.4用数据报进行广播通讯,DatagramSocket只允许数据报发送一个目的地址,包中提供了一个类MulticastSocket,允许数据报以广播方式发送到该端口的所有客户。MulticastSocket用在客户端,监听服务器广播来的数据。 我们对上面的程序作一些修改,利用MulticastSocket实现广播通信。新程序完成的功能是使同时运行的多个客户程序能够接收到服务器发送来的相同的信息,显示在各自的屏幕上。 1. 客户方程序:MulticastClient.java 2. 服务器方程序:MulticastServer.java 3. 程序MulticastServerThread.java,小结,至此,Java网络编程这一章已经讲解完毕。读者通过学习,应该对网络编程有了一个清晰的认识,可能对某些概念还不是十分的清楚,还是需要更多的实践来进一步掌握。编程语言的学习不同于一般的学习,及其强调实践的重要性。读者应该对URL网络编程,Socket中的TCP,UDP编程进行大量的练习才能更好的掌握本章中所提到的一些概念,才能真正学到Java网络编程的精髓! 最后几个小节所举的例子,读者务必要亲自试验一下,如果遇到问题,想办法解决之。最好能根据自己的意图加以改进。这样才能更好的理解这几个程序,理解其中所包含的编程思想。,10.6 练习思考题,1、 在JAVA语言网络编程中,URL类是在包中,该类中提供了许多方法用来访问URL对象的各种资源,下列哪个用来获取URL中的端口号()。 A、getFile() B、getProtocol() C、getHost() D、getPort() 2、 一个URL对象通常包含哪些信息? 3、 怎样读取URL中的资源? 4、 Java使用哪个组件来显示URL中的HTML文件?,第11章 Java Applet基础,Java Applet的运行原理 Applet类及其常用方法 一个显示动画的Applet程序 Applet中使用URL Applet中建立新线程 Applet中播放声音,11.1 Java Applet的运行原理,一个Java Applet程序中必须有一个类是Applet类的子类。称该子类是Java Applet的主类,并且主类必须修饰为public。 Java Applet程序是通过浏览器来执行的,因此,它和Java应用程序有许多不同之处。,11.1.1 Applet的运行环境,一个Java应用程序经过编译成.class后,可直接通过Java解释器来执行。一个Java Applet在执行时也是先被编译成为.class文件,但必须再将字节码文件嵌入到Web页面中,通过浏览器或使用JDK中的appletviewer命令来运行。 下面通过例子来说明一个Java Applet的运行原理。,【例11-1】 一个名为HelloEducation.java的Applet类,在浏览器的坐标(25,25)位置显示字符串。,package chapter11; import java.applet.Applet;/Applet类是所有的Java applet的父类; import java.awt.Graphics;/在进行显示输出时,需要用到类Graphics的对象; public class HelloEducation extends Applet / 程序员给这个类取名为HelloEducation / 所有的applet程序都是Applet类的子类 public String s; public void init() s = new String(“Welcome to Tongfang Education“); / 生成一个字符串对象 public void paint(Graphics g) g.drawString(s, 25, 25); / 在浏览器中坐标为(25,25)的位置显示字符串s ,Applet应用程序必须嵌入在HTML页面中,才能得到解释执行; Applet可以从Web页面中获得参数,并和Web页面进行交互。 含有Applet的网页的HTML文件代码中必须带有applet和/applet这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小程序代码并在本地计算机上执行该Applet小程序。,Applet是一种Java的小程序,它通过使用该Applet的HTML文件,由支持Java的网页浏览器下载运行。也可以通过java开发工具的appletviewer来运行。Applet 程序离不开使用它的HTML文件。这个HTML文件中关于Applet的信息至少应包含以下三点: 字节码文件名(编译后的Java文件,以.class为后缀); 字节码文件的地址; 在网页上显示Applet的方式。 一个HTML文件增加Applet有关的内容只是使网页更加富有生气,如添加声音、动画等这些吸引人的特征,它并不会改变HTML文件中与Applet无关的元素。,11.1.2 什么是appletviewer,appletviewer是JDK下的一个Applet查看工具,在Java安装目录下的bin文件夹中可以找到这个可执行文件。 appletviewer带有一个命令行参数形式的URL,它指向一个含有Applet引用的HTML文件。这个Applet引用是一个指定了appletviewer要装载代码的HTML标记: ,11.1.3 Java Applet程序开发步骤,Applet程序开发主要步骤如下: 选用EDIT或Windows Notepad等工具作为编辑器建立Java Applet源程序。 把Applet的源程序转换为字节码文件。 编制使用class 的HTML文件。在HTML文件内放入必要的APPLET语句。 下面举一个最简单的HelloWorld 例子11-2来说明Applet程序的开发过程:,1编辑Applet 的java源文件,创建文件夹C:ghq,在该文件夹下建立 HelloWorld.java 【例11-2】 import java.applet.Applet; import java.awt.*; public class HelloWorld extends Applet / 继承Appelet类,这是Appelet Java程序的特点 public void paint(Graphics g) g.drawString(“Hello World!“, 5, 35); 保存上述程序在C:java_work11HelloWorld.java文件里。,2编译Applet,编译HelloWorld.java源文件可使用如下JDK命令: 注意:如果编写的源程序违反了Java编程语言的语法规则,Java编译器将在屏幕上显示语法错误提示信息。源文件中必须不含任何语法错误,Java编译器才能成功地把源程序转换为appletviewer和浏览器能够执行的字节码程序。 成功地编译Java applet之后生成响应的字节码文件HelloWorld.class的文件。用资源管理器或DIR命令列出目录列表,将会发现目录C:ghq中多了一个名为HelloWorld.class的文件。,3创建HTML文件,在运行创建的HelloWorld.class 之前,还需创建一个HTML文件,appletviewer或浏览器将通过该文件访问创建的Applet。为运行HelloWorld.class, 需要创建包含如下HTML语句的名为HelloWorld.html的文件。,【例11-3】 My applet HelloWorld starting page ,4执行HelloWorld.html,如果用appletviewer运行HelloWorld.html,需输入如下的命令行: 如下图所示,可以看出,该命令启动了appletviewer并指明了html文件,该html文件中包含对应于HelloWorld的applet语句。,11.1.4 Applet的安全机制,浏览一个包含Applet的网页时,实际上是从远程服务器上下载到用户本地机上运行的,所以安全问题显得十分重要。Applet本身设定了相应的安全规则来保证用户的系统安全,这些规则包括: Applet永远无法运行本地机上的可执行程序。 Applet除了与所在的服务器联系外,无法再同任何其他的服务器取得联系。 Applet不能对本地文件系统进行读写操作。 除了本地机上使用的Java版本号、操作系统名称和版本、系统使用的特殊字符外,Applet不能获取其他有关本地计算机的信息。特别是本地系统的用户名以及Email等信息。 Applet的弹出式窗口都会带有一个警告信息。,由于Applet是在Java虚拟机中解释执行,而不是由用户计算机的CPU直接运行,才使得这些安全规则成为可能。因为解释器会检查所有的关键指令和程序运行范围,能够防止恶意编写的Applet导致计算机崩溃、重写系统内存或改变系统权限。 在某些情况下,通过使用签名的Applet还可以针对不同的情况给予其不同级别的安全等级。被签名的Applet携带一个可以证明其签名者身份的证书,加密技术能够保证这种证书不能被伪造,如果用户信任签名者,就可以赋给Applet额外的权限。,11.2 Applet类及其方法,Applet类是所有Applet应用的基类,所有的Java小应用程序都必须继承该类。如下所示。 import java. applet.*; public class OurApplet extends Applet Applet类的构造函数只有一种,即: public Applet();,11.2.1 Applet类的基本方法,表11-1 Applet的常用方法,11.2.2 Applet运行状态控制方法,Applet类中提供了四种基本方法用来控制其运行状态:init()、start()、stop()、destroy()。它们构成了创建任何Applet的框架,并实现了一个Applet从诞生、执行到停止、消亡的生命周期。 (1)init()方法:Applet第一次被加载时调用,主要功能是完成初始化操作,包括创建Applet对象、分配内存、设置初始状态等,在Applet生命周期中只运行一次。通常可以在该方法中完成从网页向Applet传递参数,添加用户界面的基本组件等操作。其格式为: public void init() ,(2)start()方法:初始化后或Applet停止运行随后又重新启动时调用,主要用于创建、启动及重新启动Applet,系统在调用完init()方法之后,将自动调用start()方法。而且,每当用户离开包含该Applet的主页后又再返回时,系统又会再执行一遍start()方法。这就意味着start()方法可以被多次执行,而不像init()方法。因此,可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2020-2025年一级建造师之一建建设工程经济模拟题库及答案下载
- 胆囊粘液囊肿的护理
- 雨课堂学堂在线学堂云《财务管理(重庆邮电大学 )》单元测试考核答案
- 房地产 -建设工程在竣工验收之前发包人擅自投入使用发包人能否以使用部分工程质量不符合合同约定为由向承包人主张权利
- 七上语文名著《西游记》中考真题及答案
- 小说《西游记》阅读练习题(附答案)
- 2026年陕西省选调生招录(面向西安电子科技大学)备考公基题库带答案解析
- 2026年劳务员之劳务员基础知识考试题库200道及一套参考答案
- 2026年劳务员之劳务员基础知识考试题库200道带答案(模拟题)
- 2025福州工业园区开发集团有限公司勘察设计分公司招聘2人备考题库带答案解析
- 业主委员会成员推荐表
- 期货基础知识(期货入门)
- 房产公司施工图设计标准
- YY/T 1603-2018医用内窥镜内窥镜功能供给装置摄像系统
- GB/T 615-2006化学试剂沸程测定通用方法
- 新闻学概论复习-
- 土的孔隙率试验检测报告
- 气相色谱仪火焰光度检测器(FPD)使用手册
- 全科病例汇报 重度低钠血症
- 飞利浦DFM100除颤仪
- 钢板桩引孔施工方法
评论
0/150
提交评论