获取请求协议

  1. public class Server01 {
  2. private ServerSocket serverSocket;
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Server01 server = new Server01();
  6. server.start();
  7. }
  8. public void start() {
  9. try {
  10. serverSocket = new ServerSocket(8888);
  11. receive();
  12. } catch (IOException e) {
  13. // TODO Auto-generated catch block
  14. e.printStackTrace();
  15. System.out.println("客户端错误");
  16. }
  17. }
  18. public void receive() {
  19. try {
  20. Socket socket = serverSocket.accept();
  21. System.out.println("一个客户端建立了连接。。。。");
  22. InputStream is = socket.getInputStream();
  23. byte[] b = new byte[1024 * 1024];
  24. int len = is.read(b);
  25. String requestInfo = new String(b, 0, len);
  26. System.out.println(len);
  27. System.out.println(requestInfo);
  28. } catch (IOException e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. System.out.println("服务连接失败");
  32. }
  33. }
  34. public void stop() {
  35. }
  36. }

返回响应协议

public void receive() {
        try {
            Socket socket = serverSocket.accept();
            System.out.println("一个客户端连接成功了。。。。。。。。");
            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
            char[] b = new char[1024 * 1024];
            int len = is.read(b);
            String requestInfo = new String(b, 0, len);
            System.out.println(len);
            System.out.println(requestInfo);

            StringBuilder responseInfo = new StringBuilder();
            responseInfo.append("<html>");
            responseInfo.append("<head>");
            responseInfo.append("<title>");
            responseInfo.append("测试");
            responseInfo.append("</title>");
            responseInfo.append("</head>");
            responseInfo.append("<body>");
            responseInfo.append("i am iron man");
            responseInfo.append("</body>");
            responseInfo.append("</html>");
            int size = responseInfo.toString().getBytes().length;

            StringBuilder response = new StringBuilder();
            String blank = " ";
            String CLRF = "\r\n";
            response.append("HTTP/1.1").append(blank).append("200").append(blank).append("OK").append(CLRF);

            response.append("Date:").append(new Date()).append(CLRF);
            response.append("Server:leon Server/0.0.1;charset=GBK").append(CLRF);
            response.append("Content-type:text/html").append(CLRF);
            response.append("Content-length:").append(size).append(CLRF);
            response.append(CLRF);

            response.append(responseInfo);

            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
            bw.write(response.toString());
            bw.flush();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("客户端错误");
        }
    }

测试结果:
image.png
问题:用https出现乱码且无response


封装response

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

使用封装的Response:

public void receive() {
        try {
            Socket socket = serverSocket.accept();
            System.out.println("一个客户端连接成功了。。。。。。。。");
            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
            char[] b = new char[1024 * 1024];
            int len = is.read(b);
            String requestInfo = new String(b, 0, len);
            System.out.println(len);
            System.out.println(requestInfo);

            Response response = new Response(socket);
            response.print("<html>");
            response.print("<head>");
            response.print("<title>");
            response.print("测试");
            response.print("</title>");
            response.print("</head>");
            response.print("<body>");
            response.print("i am iron man");
            response.print("</body>");
            response.print("</html>");

            response.pushToBrower(200);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("客户端错误");
        }
    }

封装Request

image.png
image.png
image.png
image.png
image.png
image.png

优化封装

1.Request类中添加属性
image.png
注意value为List(前端的多选框),如下图的fav:
image.png

2.在构造方法中实例化容器
image.png

3.将参数存储到map中
注意参数值为空的情况,如
image.png
image.png
image.png

4.通过key获取value
多个value:
image.png
1个value:
image.png

5.处理参数为中文的情况
image.png
修改代码:
image.png