1.1 版本五:重构项目

  将ClientHandler类中响应客户端的操作进行重构,设计一个类HttpResponse类,用它的每一个实例表示服务端发送给客户端的一个具体的响应内容:

  1. 在http包下添加类:HttpResponse.java

  1. 在HttpResponse类中定义方法flush,用来将当前响应发送给客户端。flush方法需要处理的三件事情:

    2.1 发送状态行

    2.2 发送响应头

    2.3 发送响应正文

  1. 将ClientHandler类中响应客户端的操作移动到HttpResponse类中的对应方法中.

  1. 在ClientHandler类中实例化HttpResponse,并设置要响应的内容后调用flush方法响应客户端

新建HttpResponse.java响应客户端请求类

 package cn.tedu.http;
 /**
  * 向客户端进行响应
  * @author cjn
  *
  */
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.net.Socket;
 
 public class HttpResponse {
     /**
       * 有关于状态行相关信息定义
      */
     private int statusCode = 200;
     private String statusReason = "OK";
     
     /**
       * 有关于响应头相关信息定义
      */
     
     /**
      * 有关于响应正文相关信息定义
      */
     private File entity;
     
     /**
       * 相关连接信息定义
      */
     private Socket socket;
     private OutputStream out;
     
     /**
      * 构造器方法,完成相关连接信息属性的赋值
      */
     public HttpResponse(Socket socket) {
         try {
             this.socket = socket;
             this.out = socket.getOutputStream();
        } catch (Exception e) {
             e.printStackTrace();
        }
    }
     
     /**
       * 调用发送响应信息的三个方法,完成响应客户端信息的操作
      */
     public void flush() {
         /*
           * 响应客户端
          * 1.发送状态行
          * 2.发送响应头
          * 3.发送响应正文
          */
         sendStatusLine();
         sendHeader();
         sendContext();
    }
     
     /**
      * 发送状态行
      */
     public void sendStatusLine() {
         try {
             String line = "HTTP/1.1 "+statusCode+" "+statusReason;
             out.write(line.getBytes("ISO8859-1"));
             out.write(13);//CR
             out.write(10);//LF
        } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
        } catch (IOException e) {
             e.printStackTrace();
        } catch (Exception e) {
             e.printStackTrace();
        }
    }
     
     /**
       * 发送响应头
      */
     public