-
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.
[톰캣 구현하기 1, 2단계] 히이로(문제웅) 미션 제출합니다. (#330)
* feat: 컨텐츠 협상을 통해 Content-Type 선택 기능 구현 * test: css 파일 요청에 대한 Content-Type 작성 기능 테스트 구현 * feat: login 페이지 요청 시 쿼리파라미터 파싱 기능 구현 * feat: 잘못된 정보로 login 요청 시 예외 처리 클래스 구현 * feat: login 요청 시 handler 매핑 기능 구현 * test: 학습 테스트 일부 구현 * test: 누락된 윈도우 개행문자 이슈 반영 * chore: 패키지 구조 정상화 * feat: handlerMapper를 통한 loginController 매핑 기능 구현 * feat: Login 관련 컨트롤러 및 서비스 기능 구현 * feat: 로그인 성공 여부에 따른 리다이렉션 기능 구현 * feat: 기존 login 기능에 대한 get, post 매핑 분리 * feat: 회원 가입 후 리다이렉션 기능 구현 * feat: HttpCookie 클래스 구현 * feat: 로그인 성공 시 cookie에 JSESSIONID 발급 기능 구현 * feat: session, sessionManager 기능 구현 * feat: 로그인 성공 시 session에 user객체 등록 기능 구현 * feat: 로그인된 상태로 login 페이지 접근 시 index.html로 리다이렉션 기능 구현 * feat: 운영체제 파일 시스템 차이로 인한 테스트 실패 부분 수정 * refactor: httpRequest 메세지 startLine 파싱 객체 책임 분리 * test: cache 학습 테스트 진행 완료 * style: 상수 논리적 구분을 위한 공백 라인 추가 * style: 직관성 향상을 위한 상수명 개선 * refactor: 접근제어자가 잘못 지정된 상수들을 전부 private으로 수정 * refactor: startLine에서 url 변수명을 path로 변경 * style: 메서드 시그니처 가독성 개선 * refactor: contentType 선택 메서드 명 수정 * refactor: 적절하지 않은 변수명 수정 * refactor: 존재하지 않는 리소스 요청 시 404 status와 페이지를 반환하도록 수정 * refactor: 중복되는 values 파싱 로직 util 클래스로 분리 * refactor: 404페이지 반환 로직 수행 시 NPE 발생위험 Optional 적용
- Loading branch information
1 parent
68db530
commit d712003
Showing
29 changed files
with
973 additions
and
154 deletions.
There are no files selected for viewing
20 changes: 20 additions & 0 deletions
20
study/src/main/java/cache/com/example/cachecontrol/CacheInterceptor.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 cache.com.example.cachecontrol; | ||
|
||
import java.util.Objects; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
import org.springframework.http.CacheControl; | ||
import org.springframework.web.servlet.HandlerInterceptor; | ||
|
||
public class CacheInterceptor implements HandlerInterceptor { | ||
|
||
@Override | ||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, | ||
Object handler, Exception ex) throws Exception { | ||
if (Objects.isNull(response.getHeader("Cache-Control"))) { | ||
response.addHeader("Cache-Control", | ||
CacheControl.noCache().cachePrivate().getHeaderValue()); | ||
} | ||
HandlerInterceptor.super.afterCompletion(request, response, handler, ex); | ||
} | ||
} |
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
14 changes: 10 additions & 4 deletions
14
study/src/main/java/cache/com/example/etag/EtagFilterConfiguration.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,12 +1,18 @@ | ||
package cache.com.example.etag; | ||
|
||
import org.springframework.boot.web.servlet.FilterRegistrationBean; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.web.filter.ShallowEtagHeaderFilter; | ||
|
||
@Configuration | ||
public class EtagFilterConfiguration { | ||
|
||
// @Bean | ||
// public FilterRegistrationBean<ShallowEtagHeaderFilter> shallowEtagHeaderFilter() { | ||
// return null; | ||
// } | ||
@Bean | ||
public FilterRegistrationBean<ShallowEtagHeaderFilter> shallowEtagHeaderFilter() { | ||
FilterRegistrationBean<ShallowEtagHeaderFilter> filterRegistrationBean = | ||
new FilterRegistrationBean<>(new ShallowEtagHeaderFilter()); | ||
filterRegistrationBean.addUrlPatterns("/etag", "/resources/*"); | ||
return filterRegistrationBean; | ||
} | ||
} |
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 |
---|---|---|
|
@@ -7,3 +7,6 @@ server: | |
max-connections: 1 | ||
threads: | ||
max: 2 | ||
compression: | ||
enabled: true | ||
min-response-size: 10 |
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 +1 @@ | ||
console.log('hello world'); | ||
console.log('hello world'); |
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,54 +1,62 @@ | ||
package study; | ||
|
||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
import static org.assertj.core.api.Assertions.assertThat; | ||
|
||
import java.io.IOException; | ||
import java.net.URL; | ||
import java.nio.file.Files; | ||
import java.nio.file.Path; | ||
import java.util.Collections; | ||
import java.nio.file.Paths; | ||
import java.util.List; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
|
||
/** | ||
* 웹서버는 사용자가 요청한 html 파일을 제공 할 수 있어야 한다. | ||
* File 클래스를 사용해서 파일을 읽어오고, 사용자에게 전달한다. | ||
* 웹서버는 사용자가 요청한 html 파일을 제공 할 수 있어야 한다. File 클래스를 사용해서 파일을 읽어오고, 사용자에게 전달한다. | ||
*/ | ||
@DisplayName("File 클래스 학습 테스트") | ||
class FileTest { | ||
|
||
/** | ||
* resource 디렉터리 경로 찾기 | ||
* | ||
* File 객체를 생성하려면 파일의 경로를 알아야 한다. | ||
* 자바 애플리케이션은 resource 디렉터리에 HTML, CSS 같은 정적 파일을 저장한다. | ||
* resource 디렉터리의 경로는 어떻게 알아낼 수 있을까? | ||
* <p> | ||
* File 객체를 생성하려면 파일의 경로를 알아야 한다. 자바 애플리케이션은 resource 디렉터리에 HTML, CSS 같은 정적 파일을 저장한다. resource | ||
* 디렉터리의 경로는 어떻게 알아낼 수 있을까? | ||
*/ | ||
@Test | ||
void resource_디렉터리에_있는_파일의_경로를_찾는다() { | ||
//given | ||
final String fileName = "nextstep.txt"; | ||
|
||
// todo | ||
final String actual = ""; | ||
//when | ||
URL resource = getClass().getClassLoader().getResource(fileName); | ||
final String actual = resource.getPath(); | ||
|
||
//then | ||
assertThat(actual).endsWith(fileName); | ||
} | ||
|
||
/** | ||
* 파일 내용 읽기 | ||
* | ||
* 읽어온 파일의 내용을 I/O Stream을 사용해서 사용자에게 전달 해야 한다. | ||
* File, Files 클래스를 사용하여 파일의 내용을 읽어보자. | ||
* <p> | ||
* 읽어온 파일의 내용을 I/O Stream을 사용해서 사용자에게 전달 해야 한다. File, Files 클래스를 사용하여 파일의 내용을 읽어보자. | ||
*/ | ||
@Test | ||
void 파일의_내용을_읽는다() { | ||
//given | ||
final String fileName = "nextstep.txt"; | ||
|
||
// todo | ||
final Path path = null; | ||
|
||
// todo | ||
final List<String> actual = Collections.emptyList(); | ||
|
||
URL resource = getClass().getClassLoader().getResource(fileName); | ||
Path path = Paths.get(resource.getPath().substring(1)); | ||
|
||
//when | ||
final List<String> actual; | ||
try { | ||
actual = Files.readAllLines(path); | ||
} catch (IOException e) { | ||
throw new RuntimeException(e); | ||
} | ||
|
||
//then | ||
assertThat(actual).containsOnly("nextstep"); | ||
} | ||
} |
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.