Skip to content

Commit 7587d10

Browse files
committed
refactor:[#4]RequestHandler에서 HttpRequest로 inputstream 처리로직 이동
1 parent 793db85 commit 7587d10

5 files changed

Lines changed: 56 additions & 35 deletions

File tree

src/main/java/handler/RequestHandler.java

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,22 @@
11
package handler;
22

33
import http.request.HttpMethod;
4-
import http.request.RequestHeaders;
4+
import http.request.HttpRequest;
55
import http.request.RequestLine;
6+
import http.request.RequestMessageBody;
67
import http.request.RequestURI;
7-
import java.io.BufferedReader;
88
import java.io.DataOutputStream;
99
import java.io.File;
1010
import java.io.IOException;
1111
import java.io.InputStream;
12-
import java.io.InputStreamReader;
1312
import java.io.OutputStream;
1413
import java.net.Socket;
15-
import java.net.URLDecoder;
16-
import java.nio.charset.StandardCharsets;
1714
import java.nio.file.Files;
1815
import java.util.Map;
1916
import model.User;
2017
import org.slf4j.Logger;
2118
import org.slf4j.LoggerFactory;
2219
import util.HttpRequestUtils;
23-
import util.HttpRequestUtils.Pair;
24-
import util.IOUtils;
2520

2621
public class RequestHandler extends Thread {
2722
private static final Logger log = LoggerFactory.getLogger(RequestHandler.class);
@@ -37,16 +32,9 @@ public void run() {
3732
connection.getPort());
3833

3934
try (InputStream in = connection.getInputStream(); OutputStream out = connection.getOutputStream()) {
40-
41-
InputStreamReader inputStreamReader = new InputStreamReader(in, StandardCharsets.UTF_8); // 왜 안먹힐까?
42-
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
43-
44-
String line = URLDecoder.decode(bufferedReader.readLine(), StandardCharsets.UTF_8); // 왜 한 번 더 해줘야 먹힐까? - 위에서 안먹히는 걸까?
45-
log.info("RequestLine = {}", line);
46-
if (line == null) {
47-
return;
48-
}
49-
RequestLine requestLine = HttpRequestUtils.parseRequestLine(line);
35+
HttpRequest httpRequest = HttpRequest.from(in);
36+
RequestLine requestLine = httpRequest.getRequestLine();
37+
log.info("RequestLine= {}", requestLine);
5038
RequestURI requestUri = requestLine.getRequestUri();
5139
String url = requestUri.getPath();
5240

@@ -78,25 +66,10 @@ public void run() {
7866
responseBody(dos, body);
7967
}
8068

81-
82-
// HTTP Headers
83-
RequestHeaders requestHeaders = new RequestHeaders();
84-
while (!line.equals((""))) {
85-
line = URLDecoder.decode(bufferedReader.readLine(), StandardCharsets.UTF_8);
86-
log.debug("Header = {}", line);
87-
88-
Pair pair = HttpRequestUtils.parseHeader(line);
89-
requestHeaders.addHeader(pair);
90-
}
91-
92-
// HTTP Message Body (Content-Length 만큼 받아야 함)
9369
if (requestLine.getHttpMethod().equals(HttpMethod.POST)) {
94-
int contentLength = Integer.parseInt(requestHeaders.getHeader("Content-Length"));
95-
String messageBody = URLDecoder.decode(
96-
IOUtils.readData(bufferedReader, contentLength),
97-
StandardCharsets.UTF_8
98-
);
99-
log.debug("HTTP Message Body = {}", messageBody);
70+
RequestMessageBody requestMessageBody = httpRequest.getRequestMessageBody();
71+
String messageBody = requestMessageBody.getMessageBody();
72+
log.debug("HTTP Message Body = {}", messageBody );
10073

10174
Map<String, String> parsedMessageBody = HttpRequestUtils.parseQueryString(messageBody);
10275
if (url.equals("/user/create")) {

src/main/java/http/request/HttpRequest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
package http.request;
22

3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStream;
6+
import java.io.InputStreamReader;
7+
import java.net.URLDecoder;
8+
import java.nio.charset.StandardCharsets;
9+
import util.HttpRequestUtils;
10+
import util.HttpRequestUtils.Pair;
11+
import util.IOUtils;
12+
313
public class HttpRequest {
414

515
private final RequestLine requestLine;
@@ -16,6 +26,30 @@ public HttpRequest(RequestLine requestLine, RequestHeaders requestHeaders, Reque
1626
this.requestMessageBody = requestMessageBody;
1727
}
1828

29+
public static HttpRequest from(InputStream in) throws IOException {
30+
InputStreamReader inputStreamReader = new InputStreamReader(in, StandardCharsets.UTF_8); // 왜 안먹힐까?
31+
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
32+
String line = URLDecoder.decode(bufferedReader.readLine(), StandardCharsets.UTF_8); // 왜 한 번 더 해줘야 먹힐까? - 위에서 안먹히는 걸까?
33+
34+
RequestLine requestLine = HttpRequestUtils.parseRequestLine(line);
35+
RequestHeaders requestHeaders = new RequestHeaders();
36+
while (!line.equals((""))) {
37+
line = URLDecoder.decode(bufferedReader.readLine(), StandardCharsets.UTF_8);
38+
Pair pair = HttpRequestUtils.parseHeader(line);
39+
requestHeaders.addHeader(pair);
40+
}
41+
if (requestHeaders.containsKey("Content-Length")) {
42+
int contentLength = Integer.parseInt(requestHeaders.getHeader("Content-Length"));
43+
String messageBody = URLDecoder.decode(
44+
IOUtils.readData(bufferedReader, contentLength),
45+
StandardCharsets.UTF_8
46+
);
47+
RequestMessageBody requestMessageBody = new RequestMessageBody(messageBody);
48+
return new HttpRequest(requestLine, requestHeaders, requestMessageBody);
49+
}
50+
return new HttpRequest(requestLine, requestHeaders);
51+
}
52+
1953
public RequestLine getRequestLine() {
2054
return requestLine;
2155
}

src/main/java/http/request/RequestHeaders.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@ public void addHeader(Pair pair) {
1818
public String getHeader(String key) {
1919
return headers.get(key);
2020
}
21+
22+
public boolean containsKey(String key) {
23+
return headers.containsKey(key);
24+
}
2125
}

src/main/java/http/request/RequestLine.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,10 @@ public RequestURI getRequestUri() {
3030
public HttpVersion getHttpVersion() {
3131
return httpVersion;
3232
}
33+
34+
public String toString() {
35+
return httpMethod.toString() + " "
36+
+ requestUri.toString() + " "
37+
+ httpVersion.getVersion();
38+
}
3339
}

src/main/java/http/request/RequestURI.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,8 @@ public String getPath() {
2929
public String getQueryString() {
3030
return queryString;
3131
}
32+
33+
public String toString() {
34+
return path + queryString;
35+
}
3236
}

0 commit comments

Comments
 (0)