从0开始使用java编写自己的HTTP服务器(三)

HttpResponse对象封装


前言

前一篇文章我们介绍了如何去封装request对象,下面我们对如何封装response对象进行介绍。


一、构建过程

1.构建httpresponse

代码如下(示例):

public class HttpResponse {
    private Map<Key,String> respondHeader ; // 头信息键值对
    private byte[] data ;   // 保存服务器返回给客户端的数据
    private StringBuffer header ;   //  头信息
    private Socket client ; //  保存客户端socket,方便在发送response后及时关闭socket
    private String proxy ;  // 协议
    private int code ;      // 返回代码,如404,200
    private String state ;  // 状态 ,如 ok,not found
    public void setCode(int code) {
        this.code = code;
    }

    public void setState(String state) {
        this.state = state;
    }

    public void setProxy(String proxy) {
        this.proxy = proxy;
    }

    public HttpResponse() {
        respondHeader = new HashMap<>() ;
        header = new StringBuffer() ;
    }
    // 头信息构建
    private void build(){
        header.append(proxy+" ") ;
        header.append(code+" ") ;
        header.append(state+"\r\n") ;
        for (Map.Entry<Key,String> per:respondHeader.entrySet()){
            header.append(per.getKey()) ;
            header.append(": ") ;
            header.append(per.getValue()) ;
            header.append("\r\n") ;
        }
        header.append("\r\n") ;
    }
    // 该方法用于从服务器写入数据
    public void setRespondBody(byte[] i){
        this.data = i ;
    }
    // 该方法用于设置响应头
    public void setRespondHeader(Key key,String value){
        respondHeader.put(key,value) ;
    }
    // 该方法用于向服务器发送数据
    public void sendToClient(OutputStream stream) throws IOException {
        build();
        System.out.println(header);

       stream.write(header.toString().getBytes(StandardCharsets.UTF_8));
       if(data!=null){
           stream.write(data);
       }

    }
    // 设置socket
    public void setClient(Socket client) {
        this.client = client;
    }
    public void socketClosed() throws IOException {
        client.close();
    }
}

总结

这里我们对response对象进行了封装。

感谢阅读,欢迎交流!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值