11package handler ;
22
3+ import controller .FrontController ;
34import http .request .HttpMethod ;
4- import http .request .RequestHeaders ;
5+ import http .request .HttpRequest ;
56import http .request .RequestLine ;
7+ import http .request .RequestMessageBody ;
68import http .request .RequestURI ;
7- import java . io . BufferedReader ;
9+ import http . response . HttpResponse ;
810import java .io .DataOutputStream ;
911import java .io .File ;
1012import java .io .IOException ;
1113import java .io .InputStream ;
12- import java .io .InputStreamReader ;
1314import java .io .OutputStream ;
1415import java .net .Socket ;
15- import java .net .URLDecoder ;
16- import java .nio .charset .StandardCharsets ;
1716import java .nio .file .Files ;
1817import java .util .Map ;
1918import model .User ;
2019import org .slf4j .Logger ;
2120import org .slf4j .LoggerFactory ;
2221import util .HttpRequestUtils ;
23- import util .HttpRequestUtils .Pair ;
24- import util .IOUtils ;
2522
2623public class RequestHandler extends Thread {
2724 private static final Logger log = LoggerFactory .getLogger (RequestHandler .class );
@@ -37,68 +34,26 @@ public void run() {
3734 connection .getPort ());
3835
3936 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- StringBuilder sb = new StringBuilder ();
44-
45- String line = URLDecoder .decode (bufferedReader .readLine (), StandardCharsets .UTF_8 ); // 왜 한 번 더 해줘야 먹힐까? - 위에서 안먹히는 걸까?
46- log .info ("RequestLine = {}" , line );
47- if (line == null ) {
48- return ;
49- }
50- RequestLine requestLine = HttpRequestUtils .parseRequestLine (line );
37+ HttpRequest httpRequest = HttpRequest .from (in );
38+ HttpResponse httpResponse = HttpResponse .ok ();
39+ RequestLine requestLine = httpRequest .getRequestLine ();
40+ log .info ("RequestLine= {}" , requestLine );
5141 RequestURI requestUri = requestLine .getRequestUri ();
5242 String url = requestUri .getPath ();
5343
54- byte [] body = null ;
55- DataOutputStream dos = new DataOutputStream (out );
5644 if (requestLine .getHttpMethod ().equals (HttpMethod .GET )) {
5745 if (url .equals ("/index.html" )) {
58- body = Files . readAllBytes ( new File ( "./webapp" + url ). toPath () );
46+ httpResponse = HttpResponse . ok ( "/index.html" );
5947 }
6048 if (url .equals ("/user/form.html" )) {
61- body = Files . readAllBytes ( new File ( "./webapp" + url ). toPath () );
49+ httpResponse = HttpResponse . ok ( "/user/form.html" );
6250 }
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 (
68- parsedQueryString .get ("userId" ),
69- parsedQueryString .get ("password" ),
70- parsedQueryString .get ("name" ),
71- parsedQueryString .get ("email" )
72- );
73- log .debug ("Create User ! = {}" , user );
74- }
75- }
76-
77- if (body == null ){
78- body = "Hello World" .getBytes ();
79- }
80- response200Header (dos , body .length );
81- responseBody (dos , body );
82-
83- // HTTP Headers
84- RequestHeaders requestHeaders = new RequestHeaders ();
85- while (!line .equals (("" ))) {
86- line = URLDecoder .decode (bufferedReader .readLine (), StandardCharsets .UTF_8 );
87- Pair pair = HttpRequestUtils .parseHeader (line );
88- requestHeaders .addHeader (pair );
89- sb .append (line );
90- sb .append ("\r \n " );
91- log .debug ("Header = {}" , line );
9251 }
9352
94- // HTTP Message Body (Content-Length 만큼 받아야 함)
9553 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 );
54+ RequestMessageBody requestMessageBody = httpRequest .getRequestMessageBody ();
55+ String messageBody = requestMessageBody .getMessageBody ();
56+ log .debug ("HTTP Message Body = {}" , messageBody );
10257
10358 Map <String , String > parsedMessageBody = HttpRequestUtils .parseQueryString (messageBody );
10459 if (url .equals ("/user/create" )) {
@@ -110,30 +65,12 @@ public void run() {
11065 );
11166 log .debug ("Create User ! = {}" , user );
11267 }
68+ httpResponse = HttpResponse .found ("/index.html" );
11369 }
70+ httpResponse .flush (out );
11471
11572 } catch (IOException e ) {
11673 log .error (e .getMessage ());
11774 }
11875 }
119-
120- private void response200Header (DataOutputStream dos , int lengthOfBodyContent ) {
121- try {
122- dos .writeBytes ("HTTP/1.1 200 OK \r \n " );
123- dos .writeBytes ("Content-Type: text/html;charset=utf-8\r \n " );
124- dos .writeBytes ("Content-Length: " + lengthOfBodyContent + "\r \n " );
125- dos .writeBytes ("\r \n " );
126- } catch (IOException e ) {
127- log .error (e .getMessage ());
128- }
129- }
130-
131- private void responseBody (DataOutputStream dos , byte [] body ) {
132- try {
133- dos .write (body , 0 , body .length );
134- dos .flush ();
135- } catch (IOException e ) {
136- log .error (e .getMessage ());
137- }
138- }
13976}
0 commit comments