|
1 | 1 | package handler; |
2 | 2 |
|
| 3 | +import http.request.HttpMethod; |
| 4 | +import http.request.RequestHeaders; |
3 | 5 | import http.request.RequestLine; |
4 | 6 | import http.request.RequestURI; |
5 | 7 | import java.io.BufferedReader; |
|
18 | 20 | import org.slf4j.Logger; |
19 | 21 | import org.slf4j.LoggerFactory; |
20 | 22 | import util.HttpRequestUtils; |
| 23 | +import util.HttpRequestUtils.Pair; |
| 24 | +import util.IOUtils; |
21 | 25 |
|
22 | 26 | public class RequestHandler extends Thread { |
23 | 27 | private static final Logger log = LoggerFactory.getLogger(RequestHandler.class); |
@@ -49,41 +53,65 @@ public void run() { |
49 | 53 |
|
50 | 54 | byte[] body = null; |
51 | 55 | 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( |
65 | 68 | parsedQueryString.get("userId"), |
66 | 69 | parsedQueryString.get("password"), |
67 | 70 | parsedQueryString.get("name"), |
68 | 71 | parsedQueryString.get("email") |
69 | 72 | ); |
70 | | - log.debug("Create User ! = {}", user); |
| 73 | + log.debug("Create User ! = {}", user); |
| 74 | + } |
71 | 75 | } |
72 | 76 |
|
73 | 77 | if (body == null){ |
74 | 78 | body = "Hello World".getBytes(); |
75 | 79 | } |
76 | | - |
77 | 80 | response200Header(dos, body.length); |
78 | 81 | responseBody(dos, body); |
79 | 82 |
|
| 83 | + // HTTP Headers |
| 84 | + RequestHeaders requestHeaders = new RequestHeaders(); |
80 | 85 | while (!line.equals((""))) { |
81 | 86 | line = URLDecoder.decode(bufferedReader.readLine(), StandardCharsets.UTF_8); |
| 87 | + Pair pair = HttpRequestUtils.parseHeader(line); |
| 88 | + requestHeaders.addHeader(pair); |
82 | 89 | sb.append(line); |
83 | 90 | sb.append("\r\n"); |
84 | 91 | log.debug("Header = {}", line); |
85 | 92 | } |
86 | 93 |
|
| 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 | + |
87 | 115 | } catch (IOException e) { |
88 | 116 | log.error(e.getMessage()); |
89 | 117 | } |
|
0 commit comments