-
Notifications
You must be signed in to change notification settings - Fork 388
[Tomcat 구현하기 - 3단계] 짱수(장혁수) 미션 제출합니다. #673
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
40 commits
Select commit
Hold shift + click to select a range
caae46a
이슈 템플릿 생성
zangsu fed02f6
fix: remove implementation logback-classic on gradle (#501)
geoje 7e91356
fix: add threads min-spare configuration on properties (#502)
geoje 04921cb
Merge branch 'woowacourse:main' into main
zangsu a7f5de9
Merge branch 'woowacourse:zangsu' into zangsu
zangsu 17dbf54
Merge branch 'woowacourse:zangsu' into zangsu
zangsu 2466ea2
chore: 세션은 Http 에 종속되는 존재가 아니므로 패키지 변경
zangsu 76e056b
chore: RequestParameters 는 Http 요청에 관련된 객체이므로 패키지 이동
zangsu 5faa10c
refactor: RequestLine 테스트 추가 및 예외처리
zangsu e63b72d
test: RequestParameters 파싱 테스트 생성
zangsu 479ee7a
refactor: Http 관련 객체들에게 Http 네이밍 추가
zangsu 83e8552
feat: 미션 요구사항에 있는 뼈대 코드 추가
zangsu 44aca15
feat: Http 메서드에 따른 분기 추가
zangsu 611a3f5
feat: 요청에 따라 Servlet 을 다르게 처리하는 흐름 구현
zangsu fc8dbd3
feat: 실제로 요청이 Controller 까지 전달될 수 있도록 변경
zangsu 7201ebc
feat: HttpResponse 를 가변객체로 변경
zangsu 6c2ab74
feat: HttpResponse 를 가변객체로 변경
zangsu dabb8d5
refactor: Request URL 과 컨트롤러 연결 설정 분리
zangsu cf26247
refactor: LoginController 분리
zangsu c48cd92
refactor: RegisterController 분리
zangsu c3ede1c
fix: 로그인 뷰 조회 기능 수정
zangsu 2a115e6
refactor: 정적 파일 Controller 분리
zangsu 3107316
refactor: 상수 사용
zangsu 9ff1722
refactor: 정적 파일 POST 요청 예외처리
zangsu 410c5c5
refactor: 요청 처리 실패 예외처리
zangsu 810e43f
refactor: 예외 이름 변경
zangsu ccd4e88
refactor: 사용하지 않는 메서드 삭제
zangsu a997bf1
refactor: HttpStatus enum 분리
zangsu f7af5c5
refactor: 필드에 final 추가
zangsu f08952b
refactor: 기본적으로 생성되는 응답을 NOT_FOUND 로 생성
zangsu a5e7582
test: PathMatchServletContainer 테스트 작성
zangsu d025b9b
test: SessionManager 테스트
zangsu 9c836ef
test: Session 테스트 추가
zangsu 59adc64
refactor: 사용하지 않는 메서드 삭제
zangsu 0c6e4e2
test: 세션 요청 관련 객체 테스트
zangsu c15f56d
test: 학습 테스트 stage 0 완료
zangsu fc516c0
test: 학습 테스트 stage 1 완료
zangsu 3761410
fix: config 로 분리한 RequestMapping 을 사용하도록 변경
zangsu d4b71c5
refactor: 휴리스틱 캐시 제거
zangsu 679b872
fix: 요청 매핑을 정규식을 통해 진행하도록 변경
zangsu File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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,17 @@ | ||
| package com.techcourse; | ||
|
|
||
| import org.apache.catalina.servlet.PathMatchServletContainer; | ||
| import org.apache.catalina.servlet.RequestMapping; | ||
| import org.apache.catalina.startup.Tomcat; | ||
|
|
||
| import com.techcourse.config.RequestMappingConfig; | ||
|
|
||
| public class Application { | ||
|
|
||
| public static void main(String[] args) { | ||
| var tomcat = new Tomcat(); | ||
| RequestMapping requestMapping = RequestMappingConfig.getRequestMapping(); | ||
| PathMatchServletContainer servletContainer = new PathMatchServletContainer(requestMapping); | ||
| var tomcat = new Tomcat(servletContainer); | ||
| tomcat.start(); | ||
| } | ||
| } |
23 changes: 23 additions & 0 deletions
23
tomcat/src/main/java/com/techcourse/config/RequestMappingConfig.java
This file contains hidden or 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,23 @@ | ||
| package com.techcourse.config; | ||
|
|
||
| import java.util.Map; | ||
|
|
||
| import org.apache.catalina.servlet.RequestMapping; | ||
|
|
||
| import com.techcourse.controller.LoginController; | ||
| import com.techcourse.controller.RegisterController; | ||
| import com.techcourse.controller.StaticResourceController; | ||
|
|
||
| public class RequestMappingConfig { | ||
| public static RequestMapping getRequestMapping() { | ||
| var staticResourceController = new StaticResourceController(); | ||
| return new RequestMapping( | ||
| Map.of( | ||
| "/login", new LoginController(), | ||
| "/register", new RegisterController(), | ||
| "/", staticResourceController, | ||
| ".*\\.(js|html|css)$", staticResourceController | ||
| ) | ||
| ); | ||
| } | ||
| } | ||
50 changes: 50 additions & 0 deletions
50
tomcat/src/main/java/com/techcourse/controller/LoginController.java
This file contains hidden or 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,50 @@ | ||
| package com.techcourse.controller; | ||
|
|
||
| import static org.apache.coyote.http11.httpmessage.HttpHeaders.JSESSIONID; | ||
|
|
||
| import java.util.Objects; | ||
|
|
||
| import org.apache.catalina.servlet.AbstractController; | ||
| import org.apache.coyote.http11.httpmessage.request.HttpRequest; | ||
| import org.apache.coyote.http11.httpmessage.request.HttpRequestParameters; | ||
| import org.apache.coyote.http11.httpmessage.response.HttpResponse; | ||
| import org.apache.coyote.http11.httpmessage.response.StaticResource; | ||
| import org.apache.coyote.session.Session; | ||
| import org.apache.coyote.session.SessionManager; | ||
|
|
||
| import com.techcourse.db.InMemoryUserRepository; | ||
| import com.techcourse.model.User; | ||
|
|
||
| public class LoginController extends AbstractController { | ||
| @Override | ||
| protected void doPost(HttpRequest request, HttpResponse response) throws Exception { | ||
| HttpRequestParameters requestParams = HttpRequestParameters.parseFrom(request.getBody()); | ||
| String account = requestParams.getParam("account"); | ||
| String password = requestParams.getParam("password"); | ||
| User user = InMemoryUserRepository.fetchByAccount(account); | ||
| if (user.checkPassword(password)) { | ||
| Session session = request.getSession(true); | ||
| session.setAttribute("user", user); | ||
| SessionManager.getInstance().add(session); | ||
|
|
||
| response.addCookie(JSESSIONID, session.getId()); | ||
| response.setStatusFound("/index.html"); | ||
| return; | ||
| } | ||
|
|
||
| response.setStatusFound("/401.html"); | ||
| } | ||
|
|
||
| @Override | ||
| protected void doGet(HttpRequest request, HttpResponse response) throws Exception { | ||
| if (isLoggedIn(request)) { | ||
| response.setStatusFound("/index.html"); | ||
| return; | ||
| } | ||
| response.setResponseOfStaticResource(new StaticResource("/login.html")); | ||
| } | ||
|
|
||
| private boolean isLoggedIn(HttpRequest httpRequest) { | ||
| return Objects.nonNull(httpRequest.getSession(false)); | ||
| } | ||
| } |
42 changes: 42 additions & 0 deletions
42
tomcat/src/main/java/com/techcourse/controller/RegisterController.java
This file contains hidden or 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,42 @@ | ||
| package com.techcourse.controller; | ||
|
|
||
| import org.apache.catalina.servlet.AbstractController; | ||
| import org.apache.coyote.http11.httpmessage.request.HttpRequest; | ||
| import org.apache.coyote.http11.httpmessage.request.HttpRequestParameters; | ||
| import org.apache.coyote.http11.httpmessage.response.HttpResponse; | ||
| import org.apache.coyote.http11.httpmessage.response.StaticResource; | ||
| import org.apache.coyote.session.Session; | ||
| import org.apache.coyote.session.SessionManager; | ||
|
|
||
| import com.techcourse.db.InMemoryUserRepository; | ||
| import com.techcourse.model.User; | ||
|
|
||
| public class RegisterController extends AbstractController { | ||
| @Override | ||
| protected void doPost(HttpRequest request, HttpResponse response) throws Exception { | ||
| HttpRequestParameters methodRequest = HttpRequestParameters.parseFrom(request.getBody()); | ||
| User user = register(methodRequest); | ||
| Session session = request.getSession(true); | ||
| session.setAttribute("user", user); | ||
| SessionManager.getInstance().add(session); | ||
|
|
||
| response.addCookie("JSESSIONID", session.getId()); | ||
| response.setStatusFound("/index.html"); | ||
| } | ||
|
|
||
| private User register(HttpRequestParameters requestParams) { | ||
| String account = requestParams.getParam("account"); | ||
| User user = new User( | ||
| account, | ||
| requestParams.getParam("password"), | ||
| requestParams.getParam("email") | ||
| ); | ||
| InMemoryUserRepository.save(user); | ||
| return InMemoryUserRepository.fetchByAccount(account); | ||
| } | ||
|
|
||
| @Override | ||
| protected void doGet(HttpRequest request, HttpResponse response) throws Exception { | ||
| response.setResponseOfStaticResource(new StaticResource("/register.html")); | ||
| } | ||
| } |
27 changes: 27 additions & 0 deletions
27
tomcat/src/main/java/com/techcourse/controller/StaticResourceController.java
This file contains hidden or 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,27 @@ | ||
| package com.techcourse.controller; | ||
|
|
||
| import org.apache.catalina.servlet.AbstractController; | ||
| import org.apache.coyote.http11.exception.CantHandleRequestException; | ||
| import org.apache.coyote.http11.httpmessage.request.HttpRequest; | ||
| import org.apache.coyote.http11.httpmessage.response.HttpResponse; | ||
| import org.apache.coyote.http11.httpmessage.response.StaticResource; | ||
|
|
||
| public class StaticResourceController extends AbstractController { | ||
| @Override | ||
| protected void doPost(HttpRequest request, HttpResponse response) throws Exception { | ||
| throw new CantHandleRequestException( | ||
| String.format("%s %s 요청을 처리할 수 없습니다.", request.getMethod().name(), request.getTarget()) | ||
| ); | ||
| } | ||
|
|
||
| @Override | ||
| protected void doGet(HttpRequest request, HttpResponse response) throws Exception { | ||
| if (request.getTarget().equals("/")) { | ||
| StaticResource staticResource = new StaticResource("/index.html"); | ||
| response.setResponseOfStaticResource(staticResource); | ||
| return; | ||
| } | ||
| StaticResource staticResource = new StaticResource(request.getTarget()); | ||
| response.setResponseOfStaticResource(staticResource); | ||
| } | ||
| } |
This file contains hidden or 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 hidden or 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
7 changes: 7 additions & 0 deletions
7
tomcat/src/main/java/org/apache/catalina/exception/NoMatchedControllerException.java
This file contains hidden or 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,7 @@ | ||
| package org.apache.catalina.exception; | ||
|
|
||
| public class NoMatchedControllerException extends RuntimeException { | ||
| public NoMatchedControllerException(String message) { | ||
| super(message); | ||
| } | ||
| } |
21 changes: 21 additions & 0 deletions
21
tomcat/src/main/java/org/apache/catalina/servlet/AbstractController.java
This file contains hidden or 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,21 @@ | ||
| package org.apache.catalina.servlet; | ||
|
|
||
| import org.apache.coyote.http11.httpmessage.request.HttpRequest; | ||
| import org.apache.coyote.http11.httpmessage.response.HttpResponse; | ||
|
|
||
| public abstract class AbstractController implements Controller { | ||
|
|
||
| @Override | ||
| public void service(HttpRequest request, HttpResponse response) throws Exception { | ||
| if (request.isGet()) { | ||
| doGet(request, response); | ||
| } | ||
| if (request.isPost()) { | ||
| doPost(request, response); | ||
| } | ||
| } | ||
|
|
||
| protected abstract void doPost(HttpRequest request, HttpResponse response) throws Exception; | ||
|
|
||
| protected abstract void doGet(HttpRequest request, HttpResponse response) throws Exception; | ||
| } |
8 changes: 8 additions & 0 deletions
8
tomcat/src/main/java/org/apache/catalina/servlet/Controller.java
This file contains hidden or 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,8 @@ | ||
| package org.apache.catalina.servlet; | ||
|
|
||
| import org.apache.coyote.http11.httpmessage.request.HttpRequest; | ||
| import org.apache.coyote.http11.httpmessage.response.HttpResponse; | ||
|
|
||
| public interface Controller { | ||
| void service(HttpRequest request, HttpResponse response) throws Exception; | ||
| } |
19 changes: 19 additions & 0 deletions
19
tomcat/src/main/java/org/apache/catalina/servlet/PathMatchServletContainer.java
This file contains hidden or 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,19 @@ | ||
| package org.apache.catalina.servlet; | ||
|
|
||
| import org.apache.coyote.ServletContainer; | ||
| import org.apache.coyote.http11.httpmessage.request.HttpRequest; | ||
| import org.apache.coyote.http11.httpmessage.response.HttpResponse; | ||
|
|
||
| public class PathMatchServletContainer implements ServletContainer { | ||
| private final RequestMapping requestMapping; | ||
|
|
||
| public PathMatchServletContainer(RequestMapping requestMapping) { | ||
| this.requestMapping = requestMapping; | ||
| } | ||
|
|
||
| @Override | ||
| public void service(HttpRequest request, HttpResponse response) throws Exception { | ||
| Controller controller = requestMapping.getController(request); | ||
| controller.service(request, response); | ||
| } | ||
| } |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
테스트용 메서드인가요? staticResource들 매핑하는 것이 확장성이 떨어져보입니다. /static/assets 애들은 부를 수가 없는 것 같아요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
앗, 테스트용 메서드는 아니었습니다!!
정규식 매칭으로 컨트롤러 조회 방법을 변경하였어요. 이제는 문제가 해결되었습니다!!