您的位置:首页 > 理论基础 > 计算机网络

HTTP1.0工作原理

2017-04-03 08:58 204 查看

1.HTTP工作原理

HTTP响应报文与工作原理详解》讲的比较详细了。

2.示例

(1)server端程序如下:

package org.yeyouluo.demo.jsp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
* 实现HTTP 1.0的服务器,对于所有的HTTP请求,会把HTTP请求头响应回去。
* @author yeyouluo
*
*/
public class MyHTTPServer {

public static void main(String[] args) throws IOException {
int port = 80;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("启动服务,绑定端口: " + port);

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(30);  //5.线程池

//6.这个循环不停监听socket连接,使用SocketHandler处理连入的socket,而这个处理是放在线程池中的。
while(true){
Socket clientSocket = serverSocket.accept();
System.out.println("新的连接"+clientSocket.getInetAddress() + ":" + clientSocket.getPort());
try{
fixedThreadPool.execute(new SocketHandler(clientSocket));
}catch(Exception e){
e.printStackTrace();
}
}
}

}

class SocketHandler implements Runnable{
static final String CRLF = "\r\n";  //1.换行符
private Socket clientSocket;

public SocketHandler(Socket clientSocket) {
super();
this.clientSocket = clientSocket;
}

public void handleSocket(Socket clientSocket) throws IOException{
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream())
);

PrintWriter out = new PrintWriter(
new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()))
,true);

String requestHeader = "";
String s;
while( (s = in.readLine()) != null ){
s +=  CRLF;  //2.很重要,默认情况下in.readLine的结果中'\r\n'被去掉了
requestHeader += s;
if( CRLF.equals(s) ){  //如果读取的一行数据只有换行符,说明请求头已经结束了
break;
}
}

System.out.println("客户端请求头:\n" + requestHeader);

String responseBody = "客户端的请求头是:\n"+requestHeader;
String responseHeader = "HTTP/1.0 200 OK\r\n" +
"Content-Type: text/plain; charset=UTF-8\r\n" +
"Content-Length: "+responseBody.getBytes().length+"\r\n" +
"\r\n";
System.out.println("响应头:\n" + responseHeader);

out.write(responseHeader);
out.write(responseBody);
out.flush();

out.close();
in.close();
clientSocket.close();
}

@Override
public void run() {
try {
handleSocket(clientSocket);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


server端
启动server端。

(2)client端直接通过浏览器或curl工具发送http请求即可。比如在浏览器中输入http://127.0.0.1 。

(3)server端控制台打印如下:



3.参考

http://wiki.jikexueyuan.com/project/java-web/00-02.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: