브라우저 요청과 응답하기-2

ColinSong·2020년 11월 27일
0

HTTP

목록 보기
2/2
post-thumbnail
브라우저 요청과 응답하는 코드를 try-with-resource를 사용하지 않고,
try catch 문으로 복습 차원으로 다시 작성해봤다.

try-with-resources를 사용하면 사용한 IO들을 알아서 닫아주는 역할을 한다.

사용할 땐 몰랐지만 t-w-r을 사용하지 않았을 때 자원을 어디서 닫아야 하는지 
무지했기에 이번 복습 기회에 배움을 얻었다.😊

try-with-resources

  try ( // 선언) {
      // 코드 작성
  }  catch() {
  }

1. Client / Server

2. 요청과 응답하기

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class HTTP {
    public static void main(String[] args) {
        String html = "<!DOCTYPE html>\n" +
                "<html>\n" +
                "    <head>\n" +
                "        <title>Hello HTTP Server!</title>\n" +
                "    </head>\n" +
                "    <body>\n" +
                "        <h1>HEADER</h1>\n" +
                "        <p>Contents</p>\n" +
                "    </body>\n" +
                "</html>";
        try {
            ServerSocket serverSocket = new ServerSocket(12345);
            System.out.println("클라이언트 대기 중");
            Socket socket = serverSocket.accept();
            System.out.println("클라이언트 접속");

            // 클라이언트가 입력 Stream 얻기
            InputStream in = socket.getInputStream();
            // 입력 Stream을 읽을거야
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
			
            // 콘솔창에 클라이언트에 요청 Line을 출력할거야
            String line;
            while(!(line = br.readLine()).equals("")) {
                System.out.println(line); 
            }

            // 서버 입력 Stream 얻기
            OutputStream out = socket.getOutputStream();

            // 서버가 클라이언트에게 응답하기
            String statusLine = "HTTP/1.1 200 OK \r\n";
            out.write(convertStringToBytes(statusLine));

            String contentType = "Content-Type : text/html; charset=utf-8;";
            out.write(convertStringToBytes(contentType+"\r\n"));

            String contentLength = "Content-Length :" + html.length();
            out.write(convertStringToBytes(contentLength+"\r\n"));

            // 헤더와 바디의 구분 개행
            out.write(convertStringToBytes("\r\n"));

            // 바디 (클라이언트에게 보여줄 내용)
            out.write(convertStringToBytes(html));
            out.flush();
            
            //사용한 자원은 닫아주기
            socket.close();
            serverSocket.close();
            in.close();
            out.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static byte[] convertStringToBytes(String st) {
        return st.getBytes(StandardCharsets.UTF_8);
    }
}

References

  • 🎈2020.11.27
  • 🎈정리 : song, ipad

profile
안녕하세요:)

0개의 댓글