-
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단계] 다즐(최우창) 미션 제출합니다. (#470)
* refactor: 의존성에 맞게 패키지 구조 수정 * feat: 요청 매핑 정보 분리 * feat: 서블릿 기능 구현 * feat: 동시성 확장을 위한 기능 구현 * refactor: 연산 결과가 사용되지 않기에 execute 사용하도록 수정 * refactor: pattern 오타 수정 * refactor: 변수명 오타 수정
- Loading branch information
Showing
48 changed files
with
592 additions
and
430 deletions.
There are no files selected for viewing
27 changes: 27 additions & 0 deletions
27
tomcat/src/main/java/nextstep/jwp/controller/AbstractController.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,27 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import nextstep.jwp.handle.ViewResolver; | ||
import org.apache.coyote.common.HttpMethod; | ||
import org.apache.coyote.common.HttpStatus; | ||
import org.apache.coyote.request.HttpRequest; | ||
import org.apache.coyote.response.HttpResponse; | ||
|
||
public abstract class AbstractController implements Controller { | ||
|
||
@Override | ||
public void service(final HttpRequest request, final HttpResponse response) throws Exception { | ||
if (request.getHttpMethod() == HttpMethod.GET) { | ||
doGet(request, response); | ||
return; | ||
} | ||
if (request.getHttpMethod() == HttpMethod.POST) { | ||
doPost(request, response); | ||
return; | ||
} | ||
ViewResolver.renderPage(response, HttpStatus.NOT_FOUND, "404.html"); | ||
} | ||
|
||
protected abstract void doPost(final HttpRequest request, final HttpResponse response) throws Exception; | ||
|
||
protected abstract void doGet(final HttpRequest request, final HttpResponse response) throws Exception; | ||
} |
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,9 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import org.apache.coyote.request.HttpRequest; | ||
import org.apache.coyote.response.HttpResponse; | ||
|
||
public interface Controller { | ||
|
||
void service(final HttpRequest request, final HttpResponse response) throws Exception; | ||
} |
27 changes: 27 additions & 0 deletions
27
tomcat/src/main/java/nextstep/jwp/controller/FileController.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,27 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import nextstep.jwp.handle.ViewResolver; | ||
import org.apache.coyote.common.HttpStatus; | ||
import org.apache.coyote.request.HttpRequest; | ||
import org.apache.coyote.response.HttpResponse; | ||
|
||
public class FileController extends AbstractController { | ||
|
||
private static final FileController fileController = new FileController(); | ||
|
||
private FileController() { | ||
} | ||
|
||
public static FileController getInstance() { | ||
return fileController; | ||
} | ||
|
||
@Override | ||
public void doGet(final HttpRequest request, final HttpResponse response) throws Exception { | ||
ViewResolver.renderPage(response, HttpStatus.OK, request.getUriPath().substring(1)); | ||
} | ||
|
||
@Override | ||
public void doPost(final HttpRequest request, final HttpResponse response) throws Exception { | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
tomcat/src/main/java/nextstep/jwp/controller/HelloWorldController.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,30 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import org.apache.coyote.common.ContentType; | ||
import org.apache.coyote.common.HttpStatus; | ||
import org.apache.coyote.request.HttpRequest; | ||
import org.apache.coyote.response.HttpResponse; | ||
|
||
public class HelloWorldController extends AbstractController { | ||
|
||
private static final String BODY = "Hello world!"; | ||
private static final HelloWorldController helloWorldController = new HelloWorldController(); | ||
|
||
private HelloWorldController() { | ||
} | ||
|
||
public static HelloWorldController getInstance() { | ||
return helloWorldController; | ||
} | ||
|
||
@Override | ||
public void doGet(final HttpRequest request, final HttpResponse response) throws Exception { | ||
response.setStatus(HttpStatus.OK); | ||
response.setContentType(ContentType.TEXT_HTML.getType()); | ||
response.setContent(BODY); | ||
} | ||
|
||
@Override | ||
public void doPost(final HttpRequest request, final HttpResponse response) throws Exception { | ||
} | ||
} |
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
18 changes: 13 additions & 5 deletions
18
tomcat/src/main/java/nextstep/jwp/db/InMemoryUserRepository.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 |
---|---|---|
@@ -1,27 +1,35 @@ | ||
package nextstep.jwp.db; | ||
|
||
import nextstep.jwp.model.User; | ||
|
||
import java.util.Map; | ||
import java.util.Optional; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
import java.util.concurrent.atomic.AtomicLong; | ||
import nextstep.jwp.model.User; | ||
|
||
public class InMemoryUserRepository { | ||
|
||
private static final Map<String, User> database = new ConcurrentHashMap<>(); | ||
private static final AtomicLong auto_increment = new AtomicLong(1); | ||
|
||
static { | ||
final User user = new User(1L, "gugu", "password", "[email protected]"); | ||
final User user = new User(auto_increment.getAndIncrement(), "gugu", "password", "[email protected]"); | ||
database.put(user.getAccount(), user); | ||
} | ||
|
||
public static void save(User user) { | ||
database.put(user.getAccount(), user); | ||
final User saveUser = new User( | ||
auto_increment.getAndIncrement(), | ||
user.getAccount(), | ||
user.getPassword(), | ||
user.getEmail() | ||
); | ||
database.put(saveUser.getAccount(), saveUser); | ||
} | ||
|
||
public static Optional<User> findByAccount(String account) { | ||
return Optional.ofNullable(database.get(account)); | ||
} | ||
|
||
private InMemoryUserRepository() {} | ||
private InMemoryUserRepository() { | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
tomcat/src/main/java/nextstep/jwp/exception/HandlerMappingException.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,8 @@ | ||
package nextstep.jwp.exception; | ||
|
||
public class HandlerMappingException extends RuntimeException { | ||
|
||
public HandlerMappingException() { | ||
super("Handler Mapping Fail"); | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
tomcat/src/main/java/nextstep/jwp/exception/NotFoundHandlerException.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,8 @@ | ||
package nextstep.jwp.exception; | ||
|
||
public class NotFoundHandlerException extends RuntimeException { | ||
|
||
public NotFoundHandlerException() { | ||
super("Match Handler Not Found"); | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
tomcat/src/main/java/nextstep/jwp/handle/HandlerMapping.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,28 @@ | ||
package nextstep.jwp.handle; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
import nextstep.jwp.exception.NotFoundHandlerException; | ||
import nextstep.jwp.handle.mapping.MappingInfo; | ||
import org.apache.coyote.request.HttpRequest; | ||
|
||
public class HandlerMapping { | ||
|
||
private final Map<MappingInfo, HandlerMethod> handlerMapping = new HashMap<>(); | ||
|
||
public HandlerMapping() { | ||
} | ||
|
||
public void addMappingInfo(final MappingInfo mappingInfo, final HandlerMethod handlerMethod) { | ||
handlerMapping.put(mappingInfo, handlerMethod); | ||
} | ||
|
||
public HandlerMethod getHandlerMethod(final HttpRequest request) { | ||
return handlerMapping.keySet() | ||
.stream() | ||
.filter(mappingInfo -> mappingInfo.support(request)) | ||
.findFirst() | ||
.map(handlerMapping::get) | ||
.orElseThrow(NotFoundHandlerException::new); | ||
} | ||
} |
23 changes: 23 additions & 0 deletions
23
tomcat/src/main/java/nextstep/jwp/handle/HandlerMethod.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,23 @@ | ||
package nextstep.jwp.handle; | ||
|
||
import java.lang.reflect.InvocationTargetException; | ||
import java.lang.reflect.Method; | ||
import nextstep.jwp.controller.Controller; | ||
import org.apache.coyote.request.HttpRequest; | ||
import org.apache.coyote.response.HttpResponse; | ||
|
||
public class HandlerMethod { | ||
|
||
private final Controller controller; | ||
private final Method method; | ||
|
||
public HandlerMethod(final Controller controller, final Method method) { | ||
this.controller = controller; | ||
this.method = method; | ||
} | ||
|
||
public void invokeMethod(final HttpRequest request, final HttpResponse response) | ||
throws InvocationTargetException, IllegalAccessException { | ||
method.invoke(controller, request, response); | ||
} | ||
} |
Oops, something went wrong.