spring mvc 22

5/14 공부 내용

ModelAttribute를 사용하면 Item객체를 자동으로 생성하여 파라미터를 주입(setter를 사용함) model에 addAttribute를 통해 객체를 넣음. @ModelAttribute의 name속성을 생략할 수 있는데 이렇게 하면 클래스 타입의 첫글자를 소문자로 변경하여 이를 name으로 인식한다. Item -> item 즉 위는 @ModelAttribute("item")과 같다. 리다이렉트 스프링에서 리다이렉트는 redirect:/~~~으로 지원 컨트롤러에 매핑된 PathVarialbe의 값을 여기서도 사용가능 PRG Post/Redirect/Get 웹 브라우저의 새로 고침(F5)은 마지막에 서버에 전송한 데이터를 다시 전송 예를 들어 설명해보면, 위와 같은 형식으로 동작하는 웹 사이트가 있..

Spring/Spring MVC 2021.05.14

ThymeLeaf 공부

컨트롤러에서 뷰를 호출하고 이를 템플릿 엔진인 thymeleaf를 사용하여 동적으로 변경해보자. 컨트롤러 정적 리소스(HTML 파일) 상품 목록 상품 등록 ID 상품명 가격 수량 1 테스트 상품1 10000 10 2 테스트 상품2 20000 20 이를 타임리프를 사용하여 동적으로 변경하여보자. 타임리프를 사용하기 위한 th 네임스페이스 추가 xmlns:th="http://www.thymeleaf.org" BootStrap 경로 절대경로로 변경 상대 경로로 설정되어 있던 bootstrap파일 경로를 타임리프를 사용하여 절대 경로로 변경하였다. 위와 같이 작성하면 타임리프가 기존에 있던 href를 날리고 th가 붙은 href로 설정함 href="value1" 을 th:href="value2" 의 값으로 변경..

Spring/Spring MVC 2021.05.13

HTTP Message Converter

응답의 경우 클라이언트 HTTP Aceept 헤더와 서버의 Controller 반환 타입 정보를 조합해서 HTTPMessageConverter가 선택된다. HTTP 요청 : @RequestBody, HttpEntity(RequestEntity) HTTP 응답 : @ResponseBody, HttpEntity(ResponseEntity) HTTP Message Converter 인터페이스 해당 클래스, 미디어 타입을 지원하는지 체크 Message Converter를 통해서 메시지를 읽고 쓰는 기능 스프링 부트의 주요 Message Converter ByteArrayHttpMessageConverter : byte[] 데이터를 처리 클래스 타입 : byte[] 미디어 타입 : */* request ex) @..

Spring/Spring MVC 2021.05.11

HTTP Response

정적 리소스, 뷰 템플릿 스프링에서 응답 데이터를 만드는 법은 크게 3가지 정적 리소스 뷰 템플릿 HTTP Message(주로 JSON) 정적 리소스 스프링 부트는 ClassPath의 다음 디렉토리에 있는 정적 리소스를 제공 /static, /public, /resources, /META-INF/resources src/main/resources는 리소스를 보관하는 곳이고, ClassPath의 시작 경로이다. 따라서 리소스를 넣어두면 스프링 부트가 정적 리소르로 서비스를 제공 뷰 템플릿 뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어 전달 HTML을 동적으로 생성하는 용도로 사용하지만, 다른 것들도 가능하다. 뷰 템플릿이 만들 수 있는 것이라면 뭐든지 가능하다. 스프링 부트는 기본 뷰 템플릿..

Spring/Spring MVC 2021.05.10

HTTP Request Message

단순 텍스트 Request Parameter와 다르게, HTTP Message Body를 통해 데이터가 직접 넘어오는 경우는 @RequestParam, @ModelAttribute를 사용할 수 없다. 먼저 단순한 텍스트를 HTTP Message Body에 담아서 전송하고, 이를 InputStream으로 읽어보자. Spring 공식 문서를 참조하면 알 수 있듯이, InputStream과 OutputStream을 직접 받을 수 있다. 따라서 아래와 같이 코드를 작성할 수 있다. 스프링 MVC는 다음 파라미터를 지원한다. HttpEntity : HTTP header, body 정보를 편리하게 조회 메시지 바디 정보를 직접 조회 요청 파라미터를 조회하는 기능과 관계 없음 HttpEntity는 응답에도 사용 가능..

Spring/Spring MVC 2021.05.09

HTTP Request Parameter

HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법에 대해 공부해보자. 클라이언트에서 서버로 요청 데이터를 전달할 때 주로 사용하는 3가지 방법 GET - 쿼리 파라미터 /example?username=son&age=25 메시지 바디없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 검색, 필터, 페이징등에서 많이 사용 POST - HTML Form content-type : application/x-www-form-urlencoded 메시지 바디에 쿼리 파라미터 형식으로 전달 username=son&age=20 회원 가입, 상품 주문, HTML Form 사용 HTTP message body에 데이터를 직접 담아서 요청 HTTP API에서 주로 사용, JSON / XML / TE..

Spring/Spring MVC 2021.05.07

요청 매핑

@RequestMapping은 위와 같이 다중 값 설정이 가능하다. /hello-basic과 /hello-basic/은 다른 URL이지만, 스프링은 이를 같은 요청으로 매핑한다. 또한 앞서 공부했듯이 method 속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 모두 호출된다. 이는 method 속성에서 HTTP 메서드를 지정해주는 방식으로 해결할 수 있다. 더 편리하게 제공되는 GetMapping 애노테이션으로 더욱 직관적으로 나타낼 수 있음. PathVariable(경로 변수) 위와 같이 변수를 사용하여 매핑시키고 들어온 변수를 PathVariable을 통해 꺼낼 수 있다. 최근 HTTP API는 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호 /mapping/userA /..

Spring/Spring MVC 2021.05.06

Spring MVC

스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작하므로 매우 유연하고 실용적이다. @RequestMapping 스프링은 애노테이션을 활용한 매우 유연하고 실용적인 컨트롤러를 만들었는데 이것이 바로 @RequestMapping을 사용하는 컨트롤러이다. 실무에서도 거의 이 방식의 컨트롤러를 사용 @controller 스프링이 자동으로 스프링 빈으로 등록(내부에 @Component 애노테이션이 있어 컴포넌트 스캔의 대상) 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식 @RequestMapping 요청 정보를 매핑 해당 URL이 호출되면 이 메서드가 호출된다. 메서드의 이름은 임의로 작명 ModelAndView 모델과 뷰 정보를 담아서 반환 application.properties에 prefix와 suf..

Spring/Spring MVC 2021.05.01

ViewResolver

위와 같이 ModelAndView에 논리주소를 담아 반환하여 해당 url로 접속해보면 위와 같은 404페이지가 뜨는데 이는 현재 ViewResolver가 없기 때문에 매칭되는 뷰를 찾지못했다는 오류이다. 뷰 리졸버 : InternalResourceViewResolver 스프링부트는 InternalResourceViewResolver라는 뷰 리졸버를 자동으로 등록하는데, 이때 application.properties에 등록한 spring.mvc.view.prefix (접두사), spring.mvc.view.suffix(접미사)를 사용하여 등록한다. 위와 같이 application.properties에 등록해두면 우리가 ModelAndView에 넣은 논리주소인 new-form과 더해져서 /WEB-INF/vi..

Spring/Spring MVC 2021.05.01

Handler Mapping & Handler Adapter

현재는 @Controller라는 애노테이션을 사용하여 컨트롤러를 사용하지만 과거에는 아래와 같은 딱딱한 방식의 컨트롤러를 제공했었다.(지금은 사용 X) @Component를 통해 해당 컨트롤러는 /springmvc/old-controller라는 이름의 스프링 빈으로 등록 빈의 이름으로 URL을 매핑 http://localhost:8080/springmvc/old-controller 주소로 접속하면 콘솔창에 출력이 찍힐 것이다. HandlerMapping 핸들러 매핑에서 해당 컨트롤러를 찾을 수 있어야함. ex)스프링 빈의 이름으로 핸들러를 찾을 수 있는 핸들러 매핑 HandlerAdapter 핸들러 매핑을 통해 찾은 핸들러를 실행할 수 있는 핸들러 어댑터가 필요 ex) Controller 인터페이스를 실..

Spring/Spring MVC 2021.04.30
반응형