본문 바로가기

학습/Spring45

[spring] 스프링 웹 MVC의 ExceptionHandler ExceptionHandler - 스프링 부트 실행 시, 기본 예외 핸들러 등록됨 = BasicErrorController - 콘솔(machine clientf라고 함)에서 curl로 에러페이지 요청 시, json으로 응답이 옴 Exception Handling 테스트하기 예외를 던질 컨트롤러 클래스 작성 URL맵핑 -> throw Exception 예외 클래스 작성 RuntimeException 상속 예외 핸들러에서 @ExceptionHandler(SampleException.class)를 선언한 메소드 작성 해당 컨트롤러 안에서, 해당 예외가 발생하면 이 핸들러를 사용하겠다는 의미 이벤트 핸들러처럼, 메소드 파라미터로 예외 객체 받을 수 있음 커스텀 에러 클래스 구현 @ExceptionHandler .. 2020. 4. 26.
[spring] 스프링 웹 MVC의 동적 리소스 지원 (Thymeleaf) Template Engine - 주로 View를 만드는데 사용 - 그 외 Code Generation / Email Template 등에 사용 - 사용 이유 : 서버 처리 후, 템플릿에 동적으로 값을 삽입 - 스프링 부트가 자동 설정 지원하는 엔진 Thymeleaf (★) FreeMarker Groovy Mustache JSP를 권장하지 않는 이유 - 스프링 부트의 Goal : 내장WAS로 독립적으로 실행 가능한 웹 어플리케이션을 빠르게 배포 - JSP 사용 시 WAR패키징만 가능 Undertow 서블릿 컨테이너는 JSP 미지원 의존성 문제 가능성 Thymeleaf 사용 - 의존성 추가 : spring-boot-starter-thymeleaf - 템플릿 탐색 위치 : src/main/resources/t.. 2020. 4. 25.
[spring] 스프링에서 WebJars 이용하기 WebJar Web Libraries in Jars jquery / BootStrap / react / ... 클라이언트 라이브러리를 jar 파일 안에 패키징 다른 라이브러리를 사용하는 것처럼 의존성 추가 template를 사용해서 동적으로 컨텐츠 생성 시, WebJar 안의 js, css 참조가능 정적 리소스에서도, WebJar 안의 js, css 참조가능 WebJar의 파일을 참조하는 경로 외부 Jar 내부를 참조 → 실제 Webjar 경로는 복잡함 그러나 /webjars/** 로 쉽게 접근가능 정적 리소스 맵핑처럼, webjar 요청에 대한 경로를 맵핑해주고 있다는 의미! 1234567891011121314151617 HelloHello Static Resources $(function() { al.. 2020. 4. 23.
[spring] 스프링 웹 MVC의 정적 리소스 지원 정적 리소스 제공 정적 리소스 : 웹 브라우저나 클라이언트가 요청했을 때, 이미 만들어져 있는 리소스를 응답하는 경우 서버에서 요청을 처리해서 view를 만들어내는 게 아니라, 이미 만들어진 리소스를 제공 기본으로 제공하는 정적 리소스 맵핑 "/**" (루트맵핑) classpath:/static classpath:/public classpath:/resources classpath:/META-INF/resources ex) /hello.html → /static/hello.html 을 제공할 수 있음 정적 리소스 요청 핸들러 ResourceHttpRequestHandler 리소스 객체의 Last-Modifed 헤더와, HTTP 요청의 If-Modified-Since 헤더를 비교 둘이 같은 경우, 304 .. 2020. 4. 23.
[spring] 스프링 웹 MVC의 ViewResolver 스프링 웹 MVC의 컨트롤러 Controller view name을 반환하거나 반환값을 HTTP Response Body에 쓴다. 1번은 @ResponseBody를 handler method에 사용하지 않을 때 view name 반환 스프링 웹 MVC에서는 DispatcherServlet가 ContentNegotiationViewResolver에게 view name 전달 ContentNegotiationViewResolver는 등록된 view resolver들에게 보내, 요청의 응답을 만들 수 있는 모든 view를 찾아낸다 URL의 파라미터와 Accept 헤더를 보고 적절한 view를 결정한다. 처리결과를 담은 view를 반환한다. ContentNegotiationViewResolver는 다른 view .. 2020. 4. 21.