스프링/3. 스프링 MVC 54

54. 타임리프 템플릿

타임리프는 기존 것을 대체하는 식이다. 없으면 html 그대로 출력된다. 그래서 그냥 html문서로 열어도 되긴 된다. 단, 타임리프는 자바가 실행시켜주는 것 이므로 타임리프로 대체는 할 수 없다. 상품 목록 상품 등록 ID 상품명 가격 수량 상품ID 상품이름 가격 수량 만약 th:text="${item.id}">상품ID 여기서 item.id에 대한 정보가 없으면 그냥 상품ID라고 나오고, 있으면 저 item.id가 대체되어 출력된다. 참고로 타임리프는 자바측에서 실행시켜주는거다. view.render()할 때 실행시켜주는 듯. time.id는 프로퍼티 접근법이다. 저거 쓰면 time.getId()를 해주는 거다. @{~~~} 이것이 url 링크 표현식이다. 이것도 url상의 /css/bootstrap...

51. 요청 파라미터 및 메시지바디의 데이터 정리

요청으로 데이터 보내는 것은 크게 3가지 GET의 url 쿼리 파라미터 POST html form 파라미터 (메시지바디에 들어가서 보내짐.) HTTP API 메시지바디의 데이터 @RequestParam("key") 은 GET의 url 쿼리파라미터 POST의 html form 이렇게 딱 두 종류의 경우 가능, @PostMapping("/save") public String save(@RequestParam("username") String username, @RequestParam("age") int age, Model model) { Member member = new Member(username, age); Member savedMember = memberRepository.save(member); m..

50. 스프링MVC 구조 전체정리.

전체 정리를 한번 해보자. 요청이 들어온다. 그러면 먼저 프론트컨트롤러에서 나에게 등록된 컨트롤러들에서 매핑을 해서 가져온다. (예를 들어 uri 등(더 많지만) 그것과 내가 등록한 컨트롤러에 등록한(이 uri로 요청이 들어오면 이걸 실행해줘~ 라고 내가 RequestMapping으로 등록한 것)이 있는지 찾아본 다음에, 있으면 그걸 가져온다. ) private void initHandlerMappingMap(Map handlerMappingMap){ handlerMappingMap.put("/front-controller/v5/v3/members/new-form",new MemberFormControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/..

49. 컨버터가 실행되는 위치, ArgumentResolver

여기 선 안보인다. 우리가 지금까지 컨트롤러 만든 거 보면, 예를 들어 @ResponseBody @PostMapping("/request-body-json-v2") public String requestBodyJsonV2(@RequestBody String messageBody) throws IOException { HelloData helloData = objectMapper.readValue(messageBody,HelloData.class); log.info("name={}, age={}",helloData.getUsername(), helloData.getAge()); return "ok"; } 이런 식으로 우리가 파라미터 써놓기만 하면 자동으로 누군가가 그에 맞는 인자를 넣어서 쓸 수 있게 해준..

48. HTTP 메시지 컨버터

@ResponseBody를 사용하면 viewResolve로 view의 물리 이름을 반환하는게 아니라, HttpMassageConverter가 작동한다. 이건 여러 종류의 컨버터가 있다. String 같은 문자도 있고, 객체도 있고. 보통 이렇게 2종류만 쓴다. 응답의 경우 요청의 Accept와 컨트롤러의 반환타입등을 보고 어떤 컨버터를 쓸 지 결정한다. 스프링 mvc에서는 HttpEntity라는 컨버터를 쓴다. ResponseEntity와 RequestEntity 가 있다. HttpMessageConverter인터페이스는 canRead()와 canWrite()가 있다. 이거는 읽을 수 있는건지, 또 쓸 수 있는건지 검사하는 것이다. 그리고 read()와 write()가 있다. 실제 읽고, 쓰는 것이다. ..

46. 정적 리소스, 뷰 템플릿

우선 정적 리소스는, 그냥 보여주면 된다. resource/static/경로이하 파일이름을 해주면 된다. 확장자 명은 빼도 되는데, 아마 .html이 기본으로 스프링에서 자동으로 뷰 리졸브를 해주는 모양이다. 아마도 이 확장자 명도 바꾸려면 application.properties에서 해주면 되겠지. resource/templates/ 이하의 경로 empty 위에는 "http://www.thymeleaf.org" 에 지정한 기능들을 th라는 이름으로 사용한다. empty에서 th:text="${data}"는 일단 이 태그 내부는 모델에서 data라는 키의 값으로 채운다는 뜻이다. 없으면 내가 넣어둔 empty가 그대로 된다. @Controller public class ResponseViewControl..