Skip to content

Commit b46eca1

Browse files
committed
3장 요구사항 3 완료
1 parent c860a7e commit b46eca1

3 files changed

Lines changed: 50 additions & 18 deletions

File tree

src/main/java/handler/RequestHandler.java

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package handler;
22

3+
import http.request.HttpMethod;
4+
import http.request.RequestHeaders;
35
import http.request.RequestLine;
46
import http.request.RequestURI;
57
import java.io.BufferedReader;
@@ -18,6 +20,8 @@
1820
import org.slf4j.Logger;
1921
import org.slf4j.LoggerFactory;
2022
import util.HttpRequestUtils;
23+
import util.HttpRequestUtils.Pair;
24+
import util.IOUtils;
2125

2226
public class RequestHandler extends Thread {
2327
private static final Logger log = LoggerFactory.getLogger(RequestHandler.class);
@@ -49,41 +53,65 @@ public void run() {
4953

5054
byte[] body = null;
5155
DataOutputStream dos = new DataOutputStream(out);
52-
if (url.equals("/index.html")) {
53-
body = Files.readAllBytes(new File("./webapp" + url).toPath());
54-
}
55-
56-
if (url.equals("/user/form.html")) {
57-
body = Files.readAllBytes(new File("./webapp" + url).toPath());
58-
}
59-
60-
if (url.equals("/user/create")) {
61-
String queryString = requestUri.getQueryString();
62-
log.debug("Decoded querystring = {}", queryString);
63-
Map<String, String> parsedQueryString = HttpRequestUtils.parseQueryString(queryString);
64-
User user = new User(
56+
if (requestLine.getHttpMethod().equals(HttpMethod.GET)) {
57+
if (url.equals("/index.html")) {
58+
body = Files.readAllBytes(new File("./webapp" + url).toPath());
59+
}
60+
if (url.equals("/user/form.html")) {
61+
body = Files.readAllBytes(new File("./webapp" + url).toPath());
62+
}
63+
if (url.equals("/user/create")) {
64+
String queryString = requestUri.getQueryString();
65+
log.debug("Decoded querystring = {}", queryString);
66+
Map<String, String> parsedQueryString = HttpRequestUtils.parseQueryString(queryString);
67+
User user = new User(
6568
parsedQueryString.get("userId"),
6669
parsedQueryString.get("password"),
6770
parsedQueryString.get("name"),
6871
parsedQueryString.get("email")
6972
);
70-
log.debug("Create User ! = {}", user);
73+
log.debug("Create User ! = {}", user);
74+
}
7175
}
7276

7377
if (body == null){
7478
body = "Hello World".getBytes();
7579
}
76-
7780
response200Header(dos, body.length);
7881
responseBody(dos, body);
7982

83+
// HTTP Headers
84+
RequestHeaders requestHeaders = new RequestHeaders();
8085
while (!line.equals((""))) {
8186
line = URLDecoder.decode(bufferedReader.readLine(), StandardCharsets.UTF_8);
87+
Pair pair = HttpRequestUtils.parseHeader(line);
88+
requestHeaders.addHeader(pair);
8289
sb.append(line);
8390
sb.append("\r\n");
8491
log.debug("Header = {}", line);
8592
}
8693

94+
// HTTP Message Body (Content-Length 만큼 받아야 함)
95+
if (requestLine.getHttpMethod().equals(HttpMethod.POST)) {
96+
int contentLength = Integer.parseInt(requestHeaders.getHeader("Content-Length"));
97+
String messageBody = URLDecoder.decode(
98+
IOUtils.readData(bufferedReader, contentLength),
99+
StandardCharsets.UTF_8
100+
);
101+
log.debug("HTTP Message Body = {}", messageBody);
102+
103+
Map<String, String> parsedMessageBody = HttpRequestUtils.parseQueryString(messageBody);
104+
if (url.equals("/user/create")) {
105+
User user = new User(
106+
parsedMessageBody.get("userId"),
107+
parsedMessageBody.get("password"),
108+
parsedMessageBody.get("name"),
109+
parsedMessageBody.get("email")
110+
);
111+
log.debug("Create User ! = {}", user);
112+
}
113+
}
114+
87115
} catch (IOException e) {
88116
log.error(e.getMessage());
89117
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22

33
import java.util.HashMap;
44
import java.util.Map;
5+
import util.HttpRequestUtils.Pair;
56

67
public class RequestHeaders {
78

89
private final Map<String, String> headers = new HashMap<>();
910

10-
public void addHeader(String key, String value) {
11-
headers.put(key, value);
11+
public void addHeader(Pair pair) {
12+
if (pair == null) {
13+
return;
14+
}
15+
headers.put(pair.getKey(), pair.getValue());
1216
}
1317

1418
public String getHeader(String key) {

webapp/user/form.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
<div class="container" id="main">
7676
<div class="col-md-6 col-md-offset-3">
7777
<div class="panel panel-default content-main">
78-
<form name="question" method="get" action="/user/create">
78+
<form name="question" method="post" action="/user/create">
7979
<div class="form-group">
8080
<label for="userId">사용자 아이디</label>
8181
<input class="form-control" id="userId" name="userId" placeholder="User ID">

0 commit comments

Comments
 (0)