根据http协议的会话过程,实验实现了GET请求的web服务器的方法:
通过创建ServerSocket类对象。侦听用户指定端口,等待并接受客户机请求到端口。创建与Socket相关联的输入流输出流,然后读取客户机的请求信息。若请求类型为GET,则从请求信息中获取所访问的HTML文件名:如果文件存在,则打开,把HTML头信息和文件内容通过Socket传回给浏览器,然后关闭,否则发送错误提示。
1.主线程设计:
主线程的设计就是在主线程httpserver类中实现了服务器端口的侦听,服务器接受一个客户端请求之后创建一个线程实例处理请求:主要代码:
public static void main(String args[]) {
//端口信息
int port;
ServerSocket server_socket;
//读取服务器端口号
try {
port = Integer.parseInt(args[0]);
}
catch (Exception e) {
//为默认端口
port = 8888;
}
try {
//监听服务器端口,等待连接请求
server_socket = new ServerSocket(port);
System.out.println("httpServer running on port " +
server_socket.getLocalPort());
//显示启动信息
while(true) {
//服务器接收线程
Socket socket = server_socket.accept();
System.out.println("New connection accepted " +
socket.getInetAddress() +
":" + socket.getPort());
2.连接处理分线程设计
在分线程httpRequestHandler类中实现了http的处理,以下代码中设计的类实现了Runnable接口。
class httpRequestHandler implements Runnable {
final static String CRLF = "\r\n";
Socket socket;//套接字获得
InputStream input;//输入流
OutputStream output;//输出流
BufferedReader br;
//构造方法
public httpRequestHandler(Socket socket)
throws Exception {
this.socket = socket;
this.input = socket.getInputStream();//