-
Notifications
You must be signed in to change notification settings - Fork 309
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[톰캣 구현하기 3 & 4단계] 홍고(홍여진) 미션 제출합니다 (#483)
* refactor: 정적 파일을 읽는 로직을 클래스로 분리 * refactor: ResponseBody를 클래스로 분리 * feat: Controller 생성 * refactor: HandlerMapper를 ControllerMapper로 대체 * test: thread 실습 테스트 * refactor: HttpMethod를 상수로 분리 * refactor: 매직넘버 상수로 분리 * refactor: 커스텀 예외 생성 * refactor: 패키지 변경 * refactor: final 추가 * test: RootController 할당 * style: 코드 스타일 적용 * refactor: URL이 null이면 바로 예외를 던지게 변경 * test: StaticFile 테스트 추가 * refactor: null객체 Optional로 변경 및 Optional 메소드 활용 * refactor: awaitTermination을 사용해 shutdown하게 변경 * refactor: 스레드풀의 큐 사이즈 지정
- Loading branch information
Showing
41 changed files
with
1,128 additions
and
729 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,18 @@ | ||
package nextstep; | ||
|
||
import org.apache.catalina.startup.Tomcat; | ||
import nextstep.jwp.controller.LoginController; | ||
import nextstep.jwp.controller.RegisterController; | ||
import nextstep.jwp.controller.RootController; | ||
import org.apache.catalina.controller.ControllerStatus; | ||
|
||
public class Application { | ||
|
||
public static void main(String[] args) { | ||
final var tomcat = new Tomcat(); | ||
tomcat.addController(new ControllerStatus("/"), new RootController()); | ||
tomcat.addController(new ControllerStatus("/login"), new LoginController()); | ||
tomcat.addController(new ControllerStatus("/register"), new RegisterController()); | ||
tomcat.start(); | ||
} | ||
} |
61 changes: 61 additions & 0 deletions
61
tomcat/src/main/java/nextstep/jwp/controller/LoginController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import java.util.Map; | ||
import java.util.Optional; | ||
import nextstep.jwp.db.InMemoryUserRepository; | ||
import nextstep.jwp.model.User; | ||
import org.apache.catalina.controller.AbstractController; | ||
import org.apache.coyote.http11.Session; | ||
import org.apache.coyote.http11.SessionManager; | ||
import org.apache.coyote.http11.message.HttpStatus; | ||
import org.apache.coyote.http11.message.request.Request; | ||
import org.apache.coyote.http11.message.response.Response; | ||
|
||
public class LoginController extends AbstractController { | ||
|
||
private static final String INDEX_TEMPLATE = "index.html"; | ||
private static final String USER = "user"; | ||
private static final String ACCOUNT = "account"; | ||
private static final String PASSWORD = "password"; | ||
private static final String LOGIN_TEMPLATE = "login.html"; | ||
private static final String JSESSIONID = "JSESSIONID"; | ||
|
||
@Override | ||
protected void doPost(final Request request, final Response response) { | ||
final Map<String, String> requestForms = request.getRequestForms().getFormData(); | ||
final Optional<User> optionalUser = login(requestForms.get(ACCOUNT), requestForms.get(PASSWORD)); | ||
optionalUser.ifPresentOrElse(user -> loginSuccess(request, response, user), () -> loginFail(response)); | ||
} | ||
|
||
private void loginSuccess(final Request request, final Response response, final User user) { | ||
response.setLocation(INDEX_TEMPLATE); | ||
response.setStatus(HttpStatus.FOUND); | ||
|
||
if (request.noSession()) { | ||
final Session session = new Session(); | ||
session.setAttribute(USER, user); | ||
SessionManager.add(session); | ||
response.addCookie(JSESSIONID, session.getId()); | ||
} | ||
} | ||
|
||
private void loginFail(final Response response) { | ||
final Response failedResponse = Response.createByTemplate(HttpStatus.UNAUTHORIZED, "401.html"); | ||
response.setBy(failedResponse); | ||
} | ||
|
||
private Optional<User> login(final String account, final String password) { | ||
return InMemoryUserRepository.findByAccountAndPassword(account, password); | ||
} | ||
|
||
@Override | ||
protected void doGet(final Request request, final Response response) throws Exception { | ||
if (request.getSessionValue(USER) != Optional.empty()) { | ||
response.setLocation(INDEX_TEMPLATE); | ||
response.setStatus(HttpStatus.FOUND); | ||
return; | ||
} | ||
final Response createdResponse = Response.createByTemplate(HttpStatus.OK, LOGIN_TEMPLATE); | ||
response.setBy(createdResponse); | ||
} | ||
} |
39 changes: 39 additions & 0 deletions
39
tomcat/src/main/java/nextstep/jwp/controller/RegisterController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import java.util.Map; | ||
import nextstep.jwp.db.InMemoryUserRepository; | ||
import nextstep.jwp.model.User; | ||
import org.apache.catalina.controller.AbstractController; | ||
import org.apache.coyote.http11.message.HttpStatus; | ||
import org.apache.coyote.http11.message.request.Request; | ||
import org.apache.coyote.http11.message.response.Response; | ||
|
||
public class RegisterController extends AbstractController { | ||
|
||
private static final String ACCOUNT = "account"; | ||
private static final String EMAIL = "email"; | ||
private static final String PASSWORD = "password"; | ||
private static final String INDEX_TEMPLATE = "index.html"; | ||
private static final String REGISTER_TEMPLATE = "register.html"; | ||
|
||
@Override | ||
protected void doPost(final Request request, final Response response) throws Exception { | ||
final Map<String, String> requestForms = request.getRequestForms().getFormData(); | ||
final String account = requestForms.get(ACCOUNT); | ||
final String email = requestForms.get(EMAIL); | ||
final String password = requestForms.get(PASSWORD); | ||
InMemoryUserRepository.save(new User(account, password, email)); | ||
|
||
response.setLocation(INDEX_TEMPLATE); | ||
response.setStatus(HttpStatus.FOUND); | ||
} | ||
|
||
@Override | ||
protected void doGet(final Request request, final Response response) throws Exception { | ||
final Response createdResponse = Response.createByTemplate(HttpStatus.OK, REGISTER_TEMPLATE); | ||
// response.setStatus(HttpStatus.OK); | ||
// final ResponseBody responseBody = ResponseBody.from(REGISTER_TEMPLATE); | ||
// response.setBody(responseBody); | ||
response.setBy(createdResponse); | ||
} | ||
} |
26 changes: 26 additions & 0 deletions
26
tomcat/src/main/java/nextstep/jwp/controller/RootController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import org.apache.catalina.controller.AbstractController; | ||
import org.apache.catalina.exception.UnsupportedRequestException; | ||
import org.apache.coyote.http11.message.ContentType; | ||
import org.apache.coyote.http11.message.HttpStatus; | ||
import org.apache.coyote.http11.message.request.Request; | ||
import org.apache.coyote.http11.message.response.Response; | ||
import org.apache.coyote.http11.message.response.ResponseBody; | ||
|
||
public class RootController extends AbstractController { | ||
|
||
private static final String ROOT_MESSAGE = "Hello world!"; | ||
|
||
@Override | ||
protected void doPost(final Request request, final Response response) throws Exception { | ||
throw new UnsupportedRequestException(); | ||
} | ||
|
||
@Override | ||
protected void doGet(final Request request, final Response response) throws Exception { | ||
final Response createdResponse = Response.createByResponseBody(HttpStatus.OK, | ||
new ResponseBody(ROOT_MESSAGE, ContentType.HTML)); | ||
response.setBy(createdResponse); | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
tomcat/src/main/java/nextstep/jwp/controller/StaticFileController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import org.apache.catalina.controller.AbstractController; | ||
import org.apache.catalina.exception.UnsupportedRequestException; | ||
import org.apache.coyote.http11.message.request.Request; | ||
import org.apache.coyote.http11.message.response.Response; | ||
|
||
public class StaticFileController extends AbstractController { | ||
|
||
@Override | ||
protected void doPost(final Request request, final Response response) throws Exception { | ||
throw new UnsupportedRequestException(); | ||
} | ||
|
||
@Override | ||
protected void doGet(final Request request, final Response response) throws Exception { | ||
final Response createdResponse = Response.createByTemplate(request.getRequestURI()); | ||
response.setBy(createdResponse); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.