java封装response_java webserver-封装响应协议

Response:

public class Response {

private BufferedWriter bw;

private Socket client;

private StringBuilder headInfo; //协议头包括状态行和请求头和回车

private StringBuilder content;

private int len=0; //正文的字节数

private final String BLANK=" ";

private final String CRLF="\r\n";

private Response()

{

content=new StringBuilder();

headInfo=new StringBuilder();

len=0;

}

public Response(Socket client)

{

this(); //调用默认构造器

try {

bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));

} catch (IOException e) {

e.printStackTrace();

headInfo=null;

}

}

public Response(OutputStream os)

{

this(); //调用默认构造器

bw=new BufferedWriter(new OutputStreamWriter(os));

}

public Response print(String info) //流模式,不断添加内容返回自身

{

content.append(info);

len+=info.getBytes().length;

return this;

}

public Response println(String info)

{

content.append(info).append(CRLF);

len+=(info+CRLF).getBytes().length; //换行符也占长度

return this;

}

//推送响应信息

public void pushToBrowser(int code) throws IOException

{

if(null==headInfo) {

code=505;

}

createHeadInfo(code);

bw.append(headInfo); //bw.append()以追加模式写出数据,.write()刷新原有数据,只有当前数据

bw.append(content);

bw.flush();

}

//构建头信息

private void createHeadInfo(int code) //传不同的code有不同的状态

{

//1、响应行:HTTP/1.1 200 OK

headInfo.append("HTTP/1.1").append(BLANK);

headInfo.append(code).append(BLANK);

switch(code)

{

case 200:

headInfo.append("OK").append(CRLF);

break;

case 404:

headInfo.append("NOT FOUND").append(CRLF);

break;

case 505:

headInfo.append("SERVER ERROR").append(CRLF);

break;

}

//2、响应头

headInfo.append("Date:").append(new Date()).append(CRLF);

headInfo.append("Server:").append("shsxt Server/0.0.1;charset=GBK").append(CRLF);

headInfo.append("Content-type:text/html").append(CRLF);

headInfo.append("Content-length:").append(len).append(CRLF);

headInfo.append(CRLF); //响应头和正文之间有空行

}

}

Server:

public class Server02 {

private ServerSocket serverSocket ;

public static void main(String[] args) {

Server02 server = new Server02();

server.start();

}

//启动服务

public void start() {

try {

serverSocket = new ServerSocket(8888);

receive();

} catch (IOException e) {

e.printStackTrace();

System.out.println("服务器启动失败....");

}

}

//接受连接处理

public void receive() {

try {

Socket client = serverSocket.accept();

System.out.println("一个客户端建立了连接....");

//获取请求协议

InputStream is =client.getInputStream();

byte[] datas = new byte[1024*1024];

int len = is.read(datas);

String requestInfo = new String(datas,0,len);

System.out.println(requestInfo);

//关注了内容

Response response=new Response(client); //创建好了输出流

response.print(""); //通过输出流输出

response.print("

");

response.print("

");

response.print("服务器响应成功");

response.print("

");

response.print("");

response.print("

");

response.print("shsxt server终于回来了。。。。");

response.print("");

response.print("");

//关注了状态码

response.pushToBrowser(200);

} catch (IOException e) {

e.printStackTrace();

System.out.println("客户端错误");

}

}

//停止服务

public void stop() {

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值