2022년 04월 19일 TIL
7823 단어 spring mvcTIL데브코스TIL
Spring MVC
DispatcherServlet
- Front Controller Pattern
- DispatcherServlet = Front Controller
- Controller에서 중복적으로 처리해야 하는 일들을 한곳(Front Controller)에서 처리한다.
- 요청을 알맞은 컨트롤러에 위임한다.
- 예외 처리
처리 흐름
- DispatcherServlet의 HTTP 요청 접수
- DispatcherServlet에서 Controller로 HTTP 요청 위임
- Controllerdml 모델 생성과 정보 등록
- Contorller의 결과 리턴: 모델과 뷰
- DispatcherServlet의 뷰 호출과 모델 참조
- HTTP 응답 반환
DispatcherServlet에서 controller로 요청 매핑
- Controller = Handler
- Handler Mapping
- 어떤 Controller에게 요청을 위임할지 결정하는 전략
- Handler Adapter
- 매핑 대상 Controller에 request를 처리하도록 보낸다.
- 다른 메소드와 포맷을 가진 컨트롤러를 DispatcherServlet에서 호출할 수 있도록 한다.
- View Resolver
- Controller에서 view를 return 했을경우 해당하는 view를 찾아 client에게 return 한다.
static resource 처리하기
resourceHandler
resourceHandler는 요청을 default servlet에게 위임하고 default servlet이 resource를 제공한다.
@EnableWebMvc
Spring MVC에서 필요한 Bean을 등록하기 위해 사용한다.
resourceChain()
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/")
.setCachePeriod(60)
.resourceChain(true)
.addResolver(new EncodedResourceResolver());
}
-
setCachePeriod()
캐싱 설정 -
resourceChain(true)
resourceResolver에 요청에 따른 자원 매핑 설정(기본 resolver는 pathResolver지만 chain을 사용하면 우선 순위 떨어짐).resourceChain(true).addResolver(new EncodedResourceResolver())
gzip 파일을 우선적으로 탐색한다. 만약 파일이 있으면 제공하고 없으면 일반 파일 제공한다.
Thymeleaf
Controller
@GetMapping("/customers")
public String findCustomers(Model model) {
var allCustomers = customerService.getAllCustomers();
model.addAttribute("serverTime", LocalDateTime.now());
model.addAttribute("customers", allCustomers);
return "views/customers";
}
변수 식: ${변수}
<p th:text="'The time on the server is' + ${serverTime}">----</p>
링크 식: @{링크}
<img th:src="@{/resources/bg.png}" class="img-fluid">
선택 변수 식: *{~~}
<tr th:each="customer: ${customers}" th:object="${customer}" >
<td th:text="${customer.customerId}"></td>
<td th:text="*{name}"></td>
<td th:text="*{email}"></td>
<td th:text="*{createdAt}"></td>
<td th:text="*{lastLoginAt}"></td>
</tr>
추가 정리)
servlet container
- Web container
- TOMCAT
- 서블릿을 관리하는 곳
IOC Container
- Spring Container
- Bean Factory (Bean을 읽고 Bean을 생성)
ApplicationContext
- BeanFactory + 추가 기능
- IOC Container + 추가 기능(리소스 로딩)
- ApplicationContext extends BeanFactory
Author And Source
이 문제에 관하여(2022년 04월 19일 TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yshjft/2022년-04월-19일-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)