Skip to content

Commit bf20ace

Browse files
authored
Merge pull request #10 from nathan29849/feature/#6/user_list
feat: [#6] 사용자 목록 출력 - 동적 HTML 구현
2 parents 19e2db1 + 9ae9b40 commit bf20ace

5 files changed

Lines changed: 79 additions & 13 deletions

File tree

src/main/java/db/UserDataBase.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package db;
22

3+
import java.util.ArrayList;
34
import java.util.Collection;
45
import java.util.HashMap;
6+
import java.util.List;
57
import java.util.Map;
68

79
import model.User;
@@ -26,8 +28,10 @@ public static User findUserById(String userId) {
2628
return null;
2729
}
2830

29-
public static Collection<User> findAll() {
30-
return users.values();
31+
public static List<User> findAll() {
32+
List<User> userList = new ArrayList<>();
33+
users.forEach((k, v) -> userList.add(v));
34+
return userList;
3135
}
3236

3337
private static boolean checkExistingUserId(String userId) {

src/main/java/handler/RequestHandler.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import db.UserDataBase;
55
import http.request.HttpMethod;
66
import http.request.HttpRequest;
7+
import http.request.RequestHeaders;
78
import http.request.RequestLine;
89
import http.request.RequestMessageBody;
910
import http.request.RequestURI;
@@ -12,6 +13,7 @@
1213
import java.io.InputStream;
1314
import java.io.OutputStream;
1415
import java.net.Socket;
16+
import java.util.Collection;
1517
import java.util.Map;
1618
import model.User;
1719
import org.slf4j.Logger;
@@ -39,8 +41,27 @@ public void run() {
3941
RequestURI requestUri = requestLine.getRequestUri();
4042
String url = requestUri.getPath();
4143

42-
if (requestLine.getHttpMethod().equals(HttpMethod.GET) && URLDataBase.contains(url)) {
43-
httpResponse = HttpResponse.ok(url);
44+
if (requestLine.getHttpMethod().equals(HttpMethod.GET)) {
45+
if (URLDataBase.contains(url)) {
46+
httpResponse = HttpResponse.ok(url);
47+
}
48+
if (url.equals("/user/list")) {
49+
RequestHeaders requestHeaders = httpRequest.getRequestHeaders();
50+
String cookies = requestHeaders.getCookie();
51+
log.debug("Cookie= {}", cookies);
52+
if (cookies == null) {
53+
httpResponse = HttpResponse.ok("/user/login.html");
54+
}
55+
56+
if (cookies != null) {
57+
Map<String, String> parseCookies = HttpRequestUtils.parseCookies(cookies);
58+
if (parseCookies.get("logined").equals("false")) {
59+
httpResponse = HttpResponse.ok("/user/login.html");
60+
}
61+
httpResponse = HttpResponse.ok("/user/list.html", UserDataBase.findAll());
62+
}
63+
}
64+
httpResponse.flush(out);
4465
}
4566

4667
if (requestLine.getHttpMethod().equals(HttpMethod.POST)) {

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,11 @@ public String getHeader(String key) {
2222
public boolean containsKey(String key) {
2323
return headers.containsKey(key);
2424
}
25+
26+
public String getCookie() {
27+
if (headers.containsKey("Cookie")) {
28+
return headers.get("Cookie");
29+
}
30+
return null;
31+
}
2532
}

src/main/java/http/response/HttpResponse.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import java.io.OutputStream;
88
import java.nio.charset.StandardCharsets;
99
import java.nio.file.Files;
10+
import java.util.Collection;
11+
import java.util.List;
12+
import model.User;
1013

1114
public class HttpResponse {
1215

@@ -52,6 +55,36 @@ public static HttpResponse ok(String viewName) throws IOException {
5255
return new HttpResponse(statusLine, responseHeaders, responseMessageBody);
5356
}
5457

58+
public static HttpResponse ok(String viewName, List<User> users) throws IOException {
59+
StringBuilder sb = new StringBuilder();
60+
List<String> fileLines = Files.readAllLines(new File("./webapp" + viewName).toPath());
61+
for (String fileLine : fileLines) {
62+
if (fileLine.equals("<!-- user list -->")) {
63+
int userCount = 0;
64+
sb.append(" <tbody>\r\n");
65+
for (User user : users) {
66+
userCount++;
67+
sb.append(" <tr>\r\n");
68+
sb.append(" <th scope=\"row\">").append(userCount).append("</th>");
69+
sb.append(" <td>").append(user.getUserId()).append("</td>");
70+
sb.append(" <td>").append(user.getName()).append("</td>");
71+
sb.append(" <td>").append(user.getEmail()).append("</td>");
72+
sb.append("<td><a href=\"#\" class=\"btn btn-success\" role=\"button\">수정</a></td>\r\n");
73+
sb.append(" </tr>\r\n");
74+
}
75+
sb.append(" </tbody>\r\n");
76+
}
77+
sb.append(fileLine).append("\r\n");
78+
}
79+
byte[] messageBody = sb.toString().getBytes(StandardCharsets.UTF_8);
80+
StatusLine statusLine = new StatusLine(new HttpVersion("HTTP/1.1"), HttpResponseStatus.OK);
81+
ResponseHeaders responseHeaders = new ResponseHeaders();
82+
responseHeaders.setContentType("text/html;charset=utf-8");
83+
responseHeaders.setContentLength(messageBody.length);
84+
ResponseMessageBody responseMessageBody = new ResponseMessageBody(messageBody);
85+
return new HttpResponse(statusLine, responseHeaders, responseMessageBody);
86+
}
87+
5588
public static HttpResponse found(String redirectURI) {
5689
StatusLine statusLine = new StatusLine(new HttpVersion("HTTP/1.1"), HttpResponseStatus.FOUND);
5790
ResponseHeaders responseHeaders = new ResponseHeaders();

webapp/user/list.html

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,15 @@
8282
<th>#</th> <th>사용자 아이디</th> <th>이름</th> <th>이메일</th><th></th>
8383
</tr>
8484
</thead>
85-
<tbody>
86-
<tr>
87-
<th scope="row">1</th> <td>javajigi</td> <td>자바지기</td> <td>javajigi@sample.net</td><td><a href="#" class="btn btn-success" role="button">수정</a></td>
88-
</tr>
89-
<tr>
90-
<th scope="row">2</th> <td>slipp</td> <td>슬립</td> <td>slipp@sample.net</td><td><a href="#" class="btn btn-success" role="button">수정</a></td>
91-
</tr>
92-
</tbody>
85+
<!-- user list -->
86+
<!-- <tbody>-->
87+
<!-- <tr>-->
88+
<!-- <th scope="row">1</th> <td>javajigi</td> <td>자바지기</td> <td>javajigi@sample.net</td><td><a href="#" class="btn btn-success" role="button">수정</a></td>-->
89+
<!-- </tr>-->
90+
<!-- <tr>-->
91+
<!-- <th scope="row">2</th> <td>slipp</td> <td>슬립</td> <td>slipp@sample.net</td><td><a href="#" class="btn btn-success" role="button">수정</a></td>-->
92+
<!-- </tr>-->
93+
<!-- </tbody>-->
9394
</table>
9495
</div>
9596
</div>
@@ -100,4 +101,4 @@
100101
<script src="../js/bootstrap.min.js"></script>
101102
<script src="../js/scripts.js"></script>
102103
</body>
103-
</html>
104+
</html>

0 commit comments

Comments
 (0)