• (五)——Response


     1 package my.tomcat2;
     2 
     3 import java.io.BufferedWriter;
     4 import java.io.IOException;
     5 import java.io.OutputStreamWriter;
     6 import java.net.Socket;
     7 import java.util.Date;
     8 
     9 /**
    10  * 用来反馈客户端,也就是想在客户端上显示什么信息
    11  */
    12 public class Response {
    13     //构建 响应头信息需要的一些小零件,这里可以在网上查看下 HTTP 协议
    14     private static final String CRLF = "
    ";
    15     private static final String BLANK = " ";
    16     //这里是正文,也就是显示在页面上的信息
    17     private StringBuilder context;
    18     //这里是构建 响应头信息
    19     private StringBuilder headInfo;
    20     //因为头信息最后会需要 正文的 字节长度,是字节长度,不是字符长度
    21     private int len;
    22     //用来反馈到客户端上的 输出流
    23     private BufferedWriter bw;
    24     private String msg;
    25     //状态码,这里如上查询 HTTP 协议
    26     private int code;
    27 
    28     //初始化 字段
    29     public Response(Socket client) {
    30         context = new StringBuilder();
    31         headInfo = new StringBuilder();
    32         try {
    33             bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
    34         } catch (IOException e) {
    35             code = 500;
    36             return ;
    37         }
    38     }
    39 
    40 
    41     //构建 响应头部信息
    42     public void setHead(int code){
    43         headInfo.append("HTTP/1.1").append(BLANK).append(code).append(BLANK);
    44         switch (code) {
    45             case 200 : headInfo.append("OK").append(CRLF);
    46                 break;
    47 
    48             case 404 : headInfo.append("NOT FOUND").append(CRLF);
    49                 break;
    50 
    51             case 500 : headInfo.append("SERVER ERROR").append(CRLF);
    52                 break;
    53         }
    54         headInfo.append("Server:Feng server/0.01").append(CRLF);
    55         headInfo.append("Date:").append(new Date()).append(CRLF);
    56         headInfo.append("Content-type:text/html;charset=utf-8").append(CRLF);
    57         headInfo.append("Content-Length:" + len).append(CRLF);
    58         headInfo.append(CRLF);
    59     }
    60 
    61     //反馈给 客户端 的信息
    62     public void print(String msg){
    63         context.append(msg);
    64         len += msg.getBytes().length;
    65     }
    66 
    67     public void println(String msg){
    68         context.append(msg).append(CRLF);
    69         len += (msg+CRLF).getBytes().length;
    70     }
    71     
    72     //将 响应头信息+正文 通过流传给 客户端
    73     public void pushToClient(int code){
    74         if(context == null){
    75             code = 500;
    76         }
    77         this.setHead(code);
    78         String responseInfo = headInfo.append(context).toString();
    79         try {
    80             bw.write(responseInfo);
    81             bw.flush();
    82         } catch (IOException e) {
    83             return ;
    84         } finally {
    85             CloseUtil.close(bw);
    86         }
    87     }
    88 }
  • 相关阅读:
    JavaScript 类型转换 Type Convertion
    JavaScript 对象 Object
    Git失误操作导致文件冲突、路径错误
    Swift 3.0统计缓存并清理-----(斯威夫特3.0 坑爹之获取文件大小)
    iOS ——屏幕截图
    iOS 控件设置虚线
    Swift_单例的打开方式
    第三方接入小记
    图片自定义圆角
    自定义搜索框-输入框光标不贴边
  • 原文地址:https://www.cnblogs.com/AI-Cobe/p/9606844.html
Copyright © 2020-2023  润新知