<동작구조>
Request ---> DispatcherServlet ---------------------------> Haldlermapping
----------------------------> Controller
<--Model & view name--
---------------------------->ViewResolver
----------------------------> View
response <--------------------------------------------
<어노테이션> annotation-Driven. @Component로 하고, component-scan으로 자동으로 Bean으로 등록.
@Controller
@RequestMapping( { "/", "/homepage" } ) => controller에서 이 String array를 통해 여러 request 수용가능.
public class myController {....
-param 처리 /show?my_id=12345 URL처리하려면
public String show( @RequestParam("my_id") long myId, Model model) {
}
- URL방식 param처리
@RequestMapping(value="/{my_id}", method=RequestMethod.GET)
public String show( @PathVariable("my_id") long myId, Model model) {
}
<Spring's MockMVC>
myRepository mockRepository =
mock (myRepository.class);
when (mockRepository.findData())
.thenReturn(expectedData);
.setSingleView .build .perform .andExpect 등.
<Web controller에>
@Autowired 생성자. 가능. #146
Model: View로 전달할 key,value Map.이며 아래와같이 사용함.
<c:forEach items="${modelName}" var="oneData">
<c:out value="${oneData.kv1}" />
</c:forEach>
=> spring에서 만든 sf (spring form) tag library도 존재.
sf:input 이런식으로 사용하며 Model과 연동이 잘된다.
=> srping에서 만든 s tag library도 존재
s:message 리소스 파일등에서 읽어서 메시지 출력.
<ViewResolver>
InternalResourceViewResolver를 기본적으로 쓰는데, 그 외 UrlBasedViewResolver, XmlViewResolver,
TilesViewResolver (Apache Tiles를 이용해 Web페이지 구성, tiles는 t tagLib 사용.),
ThymeleafViewRelolsver ( Tyhymeleaf = jsp 사용성 개선한 범용 template-th tag 사용하며 html처럼 막 편집가능
즉, jsp안에 <> <c:> 이런거 섞어쓰면서 오는 <>개수 혼란 등을 피할 수 있음.)
등 10개 이상의 용도에 따른 ViewResolver가 존재한다.
<기타 & Advanced>
WebApplicationInitializer
- DispatcherServlet 외에 추가적인 servlet나 filter를 등록해서 사용가능.
- onStartup & getServletFilters 메쏘드 override . (#7.1)
multipart는 보통 StandardServletMultipartResolver 를 사용.
flash attribute: redirect시 Object전달 같은 일회성 data전달을 model을 이용해 지원.
-사용법: model.addFlashAttribute("spitter", spitter);
Web Flow: spring MVC확장 framework로 flow를 관리한다.
- status, transitions, flow_Data 의 3개 요소로 구성됨.