1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public class sumcontroller implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String filePath="/Users/yanghyowon/Desktop/gjtest/data/input/user.json";
ObjectMapper objectMapper=new ObjectMapper();
int sum=0;
User[] users = objectMapper.readValue(new File(filePath), User[].class);
for (User user : users) {
System.out.println(user.getPost_count());
sum += user.getPost_count();
}
String response="{\n\t\"sum\": \""+sum+"\"\n}";
t.getResponseHeaders().add("Content-Type", "application/json");
t.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
|
HttpHandler도 추상 클래스이기 때문에 controller를 구현체 클래스로 생성해서 넣어줘야 함
t.getResponseHeaders() : HTTP response header가 저장되는 mutable Map 리턴
- Map 내부의 key들은 case-insensitive
- value가 여러 개일 경우
List<String>으로 들어가야 함
t.sendResponseHeaders(int rCode, long responseLength) : 현재 response header, rCode를 사용해서 response를 보내기 시작함
responseLength>0 : responseLength byte 길이의 내용이 t.getResponsebody()에 쓰여야 함
responseLength=0 : chunked encoding 사용
responseLength<0 : response body가 없음
- response header 중 content-length 헤더가 선언되지 않았다면, 이 메소드에서
responseLength를 사용해서 적절하게 설정해줌
t.getResponseBody() : response body가 들어갈 OutputStream 리턴
- 호출된 OutputStream을 종료함으로써 response body를 끝냄
t.getResponseHeaders(), t.sendResponseHeaders()가 먼저 호출되어야 함
t.getRequestBody()가 닫히지 않았을 때 response body stream을 종료하면 request body stream도 implicitly 닫힘
Leave a comment