java.net 包中的类和接口提供了可用于低层和高层网络编程的 API。低层 API 可以让你直接访问网络协议,但是为此你不得不使用低层的 TCP 套接字和 UDP 数据包。高层的 API (如 URL, URLConnection 和 httpURLConnection 等类) 可以使你更快的开发网络应用,却不需要写很多代码。另一篇文章,《Network PRogramming with J2SE 1.4》会告诉你如何使用低层的套接字进行网络编程。这篇文章的重点则放在如何使用 java.net 包中的高层 API 开发基于 HTTP 的应用程序。
这篇文章将有如下内容:
· 概览 HTTP
· 概览 java.net 包的高层 API
· 示例说明如何使用高层 API
· 制作一个可以下载股票行情的应用程序
· 演示如何提交数据到网页服务器
· 概览 HTTP 的验证并展示如何保护你的网络资源
· 提供代码实例演示如何执行 HTTP 的验证
概览 HTTP
超文本传输协议 (Hypertext Transfer Protocol, HTTP) 是一个“请求-回应”的应用协议。这个协议支持一套固定的方法如 GET、POST、PUT、DELETE 等。一般用 GET 方法向服务器请求资源。这里有两个 GET 请求的例子:
GET / HTTP/1.1
GET /names.Html HTTP/1.1
另外,你可以使用 GET 和 POST 方法向服务器发送数据,它们向服务器发送数据的方式是不同的:
· GET 方法:输入的数据将作为 URL 的一部分发送
· POST 方法:输入数据作为一个独立的实体发送
考虑一下下面的 HTML 表单:
这个表单会提交到 http://www.javacourses.com/servlet/getMarks 由 Servlet 处理。该表单使用了 GET 方法来传输信息。假如用户输入一个学号——比如 556677——并点击 GetMarks 按钮,表单数据就会作为 URL 的一部分传送到 Servlet 中。经过编码之后的 URL 就是:http://www.javacourses.com/servlets/getMarks?number=556677。
在使用 POST 方法的情况下,传输数据时不会将数据作为 URL 的一部分;它们会作为一个独立的实体来传输。因此,POST 方法更安全,你也可以用这个方法传输更多的数据。而且用 POST 传输的数据不一定要是文本,用 GET 方法传输的却一定要是文本。
消息息格式
请求消息指定了方法名称 (GET 或者 POST)、URL、协议版本号、头部消息和可选消息。头部消息也许会包含请求信息和客户端信息,如接受的内容类型、浏览器名称以及验证数据。返回消息指定了协议版本、响应代码和原因。不管执行是否成功,响应代码和原因都会报告。一些响应代码如下:
200 OK: Request sUCceeded. The requested resource can be found later in this message.
301 Moved Permanently: Requested resource has moved. New location is specified later in this message.
400 Bad Request: Request message is not understood by the server.
404 Not Found: Requested document is not found on this server.
关于 HTTP 和所有返回代码的信息可以在 HTTP 1.1 规范 RFC2616 中找到。
下面是一个请求消息由浏览器到服务器的例子。这里请求的 URL 是 http://java.sun.com:
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-Powerpoint, application/vnd.ms-Excel,
application/msWord, */*
Accept-Language: en-ca
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows 98; YComp 5.0.0.0)
Host: java.sun.com
Connection: Keep-Alive
Cookie: SUN_ID=24.80.19.177:28346100732290;
SunONEUserId=24.80.19.177:86521021960770
然后这里是服务器对这个请求的回复消息:
HTTP/1.1 200 OK
Server: Netscape-Enterprise/6.0
Date: Mon, 14 Oct 2002 15:18:04 GMT
Content-type: text/html
Connection: close
概览 java.net 包的高层 API
java.net 包中含有高层 API。