您的位置:首页 > 其它

CHAPTER 1 A Simple Web Server

2011-09-17 18:32 375 查看
一个Web Server也叫作HTTP Server,因为它是基于HTTP协议与客户端(Web Browser)进行交互的
基于Java的Web Server,两个比较重要的类是java.net.Socket和java.net.ServerSocket
HTTP协议
socket,指的就是网络连接中的终端。利用该终端可以从网络中写数据,也可以从网络中读取数据,注意这里是以字节流(byte stream)的方式发送数据的;要实现这两种操作,需要知道对方的IP地址和端口号
在Java中,创建一个终端对象,这里的Socket代表的是客户端(“Client”):public Socket(java.lang.String host, int port),如创建一个连接到雅虎的终端时:Socket s = new Socket("yahoo.com", 80);
写数据时,先从终端拿到输出流:s.getOutputStream();它会返回一个java.io.OutputStream的对象
读数据时,先从终端拿到输入流:s.getInputStream();它会返回一个java.io.InputStream的对象

实现像HTTP服务器或FTP服务器之类的服务器应用,java中是通过ServerSocket类来实现的,该类提供了四种方法来实现该对象的创建,需要我们指定服务端所监听的IP地址和端口号,典型的IP地址为127.0.0.1,即监听本机:
e.g.:public ServerSocket(int port, int backlog, InetAddress bindingAddress);

在实例化服务器应用时,另一个比较重要的参数是backlog(int),它用来指定服务器端拒绝响应来自客户端的请求之前所能够允许的最大的请求连接队列长度
这里的绑定地址必须是一个java.net.InetAddress累的实例,获取一个该类的对象的简单方法是通过调用它的静态方法:getByName:e.g.:InetAddress.getByName("127.0.0.1");
ServerSocket ss = new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1"));

通过调用accept()方法,可以返回一个来自客户端请求连接的Socket实例
向一个Web Server发送一个HTTP请求:
out.println("POST /index.html HTTP/1.1"); // ————>Request line

out.println("Server:localhost:8080");//———————>Request Header

out.println("Connection: close"); //—————————>Request Header

out.println();//———————————————————>Blank line


===================================================================================================================================================

HTTP协议

它使用的是可靠的TCP连接,默认端口是80
第一个版本是HTTP/0.9,之后是HTTP/1.0,现在使用的HTTP/1.1
每一次连接,都是由客户端发起HTTP请求之后建立的,服务器是不会主动的联系客户端或者说创建一个回调连接到客户端的;服务器端和客户端任何一端都可以提前终止连接
HTTP请求,一个HTTP请求包含三个部分:

HTTP请求行(Method-Uniform Resource Identifier<URI>-Protocol Version)

e.g: POST /examples/default.jsp HTTP/1.1

请求头(Request Header)
请求体(Entity Body)

HTTP/1.1支持7中请求方式:GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE;最常用的是POST和GET
URI要以“/”开头,它是相对服务器端当前应用的根目录进行资源位置解析的
注意:在请求头和请求体之间要有一个空行(即一个回车换行符)

HTTP响应,包含三部分:

响应行(Protocol-Status-Description):

e.g: HTTP/1.1 200 OK

响应头(Response Headers)
响应体(Entity body)

在响应头和响应体之间也要包含一个空行
响应体包含的是一些HTML内容;200表示状态码,指请求成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: