브라우저 요청과 응답하기-2
브라우저 요청과 응답하는 코드를 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
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);
}
}
Author And Source
이 문제에 관하여(브라우저 요청과 응답하기-2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@withcolinsong/브라우저-요청과-응답하기-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)