1、第23讲 Java高级编程(二),URL 编程,URL(Uniform Resource Locator)是统一资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW和FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。 一个URL包括两部分内容:协议名和资源名,中间用“:”分开,即protocol:resourceName 其中协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、file等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、
2、文件名或文件内部的一个引用。对于多数协议,其中的主机名和文件名是必须的,而端口号和文件内部的引用则是可选的,例如: http:/ http:/ http:/ URL (String spec);通过一个表示URL地址的字符串可以构造一个URL对象。例如,URL url1=new URL(“http:/ 2public URL(URL context, String spec);通过基URL和相对URL构造一个URL对象。例如,URL url2=new URL (“http:/ url3=new URL(url2, “index.html“) 3public URL(String protoco
3、l, String host, String file);例如,new URL(“http“, ““, “/index.htm“) 4public URL(String protocol, String host, int port, String file); 例如,URL lib=new URL(“http“, ““, 80, “library/library.htm“); 类URL的构造方法都要声明抛弃非运行时异常(MalformedURLException),因此生成URL对象时,我们必须要对这一异常进行处理,通常是用try-catch语句进行捕获。,URL常用的方法及其功能,publ
4、ic String getProtocol() /获取该URL的协议名。缩进四格, public String getHost() /获取该URL的主机名。 public int getPort() /获取该URL的端口号,若没有设置端口,返回-1。 public int getDefaultPort() /获取默认的端口号。 public String getFile() /获取该URL的文件名。 public String getRef() /获取该URL在文件中的相对位置。 public String getQuery() /获取该URL的查询信息。 public String getP
5、ath() /获取该URL的路径。 public String getAuthority() /获取该URL的权限信息。 public String getUserInfo() /获得使用者的信息。 public String getRef() /获得该URL中的HTML文档标记。 public String toString() /获得完整的URL字符串。,套接字(Socket)编程,在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。TCP是面向连接的可靠数据传输协议,它重发一切没有收到的数据,并进行数据准确性检查。IP协议是面向无连接的数据包通信,它具有数据包路由选
6、择和差错控制功能,但是它不进行正确检验。Socket工作过程包含以下四个基本的步骤: 1.创建Socket; 2.打开连接到Socket的输入流和输出流; 3.按照一定的协议对Socket进行读/写操作; 4.关闭Socket。,基于无连接的数据报(UDP)通信,UDP是一个无连接、发送独立数据包的协议。不可靠的协议,不提供可靠性保证。但是有时人们需要快速传输信息,并能容忍小的错误,就可以考虑使用UDP协议。 DatagramPacket类和DatagramSocket类是Java用来实现无连接的数据报通信的。其中DatagramPacket类负责读取数据等信息,它的主要构造方法为: (1)p
7、ublic DatagramPacket(byte buf,int length); (2)public DatagramPacket(byte buf,int length,InetAddress add,int port);DatagramSocket类则负责数据报的发送与接收,它主要构造方法有: (1)public DatagramSocket(); (2)public DatagramSocket(int port);,UDP的编程实现过程,UDP编程包括数据报的发送和接收过程。数据报的发送过程可描述如下: (1)创建一个DatagramPacket对象,其中包含要发送的数据,数据分组
8、长度,以及目标主机的IP地址和端口号。 (2)在指定的本机端口创建DatagramSocket对象。 (3)调用DatagramSocket对象的send()方法,以DatagramPacket对象为参数发送数据报。 数据报的接收过程可以描述为: (1)创建一个用于接收数据报的DatagramPacket对象,其中包含空数据缓冲区和指定数据报分组长度。 (2)在指定的本地端口好创建DatagramSocket对象。 (3)调用DatagramSocket对象的receive()方法,以DatagramPacket对象为参数接收数据报,接收到的信息包括数据报内容,发送端的IP地址,以及发送端主机
9、的发送端口号。,建立与数据库的连接,在建立与数据库系统的连接时,首先要使用JDBC加载驱动程序。JDBC使用Class类的forName()方法指明加载哪个数据库系统的JDBC驱动程序。forName()方法的参数为代表各数据库系统的一个字符串,各个数据库系统的写法各不相同,例如MySQL数据库系统写为“org.git.mm.mysql,Driver”,Oracle写为“oracle.jdbc.driver,OracleDriver”,JDBC-ODBC Bridge的数据库系统的写法为“sun.jdbc.odbc.JdbcOdbcDriver”。在正确加载JDBC驱动程序后,使用Driver
10、Manager.getConnection()方法连接数据库,该方法可有3个参数,第一个是JDBC URL,后两个分别是数据库系统的用户名和密码,指定以什么身份连接数据库。 JDBC URL是唯一确定数据库的命名方式,以便Java程序定位数据库实现连接,由数据库系统的生产厂商确定,即由JDBC驱动程序提供商确定。各驱动程序提供商并没有一个严格的JDBC URL命名标准,但在一定程度上还是有其必须遵循的规范。,JDBC URL,JDBC URL的标准格式如下所示,它由三部分组成,各部分之间用冒号分隔。 jdbc: 其中“:”是必须的。jdbc是总协议,是固定的。子协议是使用驱动程序或者数据库的名
11、称。例如JDBC-ODBC的子协议为“odbc” 。但是子协议不唯一,例如Oracle的纯Java驱动程序的子协议不一定是“oracle”。 注意,Java是大小写敏感的,JDBC URL中的协议部分所有字符必须是小写的。 数据库标识的一般格式如下: /:/ 其中用于指定连接数据库所在的服务器,可以是服务器的机器名,也可以是IP地址。当客户端和服务器是同一台机器时,服务器名可以写成 “localhost”或者 “127.0.0.1”。“:”后的端口号,是可选的。如果没有标明端口号,将使用数据库系统的默认端口号。,建立连接,在创建完数据源后,就可以建立与数据库data.mdb的连接。下面代码是通
12、常情况下用驱动程序建立连接所需所有步骤的示例: Class.forName(“sun.jdbc.odbc:OdbcOdbcDriver”); String url= “jdbc:odbc:data”; DriverManager.getConnection(url);,访问数据库,与数据库建立连接后,可以实现数据库的访问。访问数据库是数据库应用最根本的目的,而访问数据库最基本的问题有两个, 第一,如何通过SQL语句来访问数据库; 第二,如何接收从数据库返回的结果。JDBC通过接口Statement和接口ResultSet来实现数据库的访问,它们都在系统包java.sql中。,编写一个程序将Ac
13、cess数据库文件中的记录打印出来,import java.sql.*;public class Ex12-6public static void main(String args)tryClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);Connection conn = DriverManager.getConnection(“jdbc:odbc:mydatabase“);Statement stmt = conn.createStatement();String sql = “SELECT name,phone FROM fam“;ResultSe
14、t resultSet = stmt.executeQuery(sql);String name, phone;while ( resultSet.next() ) name = resultSet.getString(1).trim();phone = resultSet.getString(2).trim();System.out.println( name + “, “ + phone ); catch ( Exception e ) e.printStackTrace(); ,本章小结,Java提供了强大的编程功能,如多线程程序设计,网络程序设计和数据库编程。 Java语言的一个重要特性就是内置对多线程的支持,程序员可以应用Java开发出具有多线程、同时处理多个任务的应用程序。 多线程程序设计主要介绍了多线程的概念、多线程的实现和多线程的同步与控制。 Java网络编程主要介绍基于URL的高层Java网络编程和基于Socket的低层Java网络编程与基于UDP的Java网络编程,以及基于无连接的数据报通信编程。 Java数据库编程主要介绍JDBC概念、与数据库的连接,以及对数据库的访问。,