SpringMVC 19

[Spring] 스프링 MVC(9) - @Valid와 @InitBinder 어노테이션

@Valid와 @InitBinder 어노테이션을 이용한 검증 스프링 MVC는 JSR 303의 @Valid 어노테이션과 스프링 프레임워크의 @InitBinder 어노테이션을 이용해서 스프링 프레임워크가 유효성 검사 코드를 실행하도록 할 수 있다. 다음 예시를 보자. @Controller @RequestMapping("/auth/login") public class LoginController { @RequestMapping(method = RequestMethod.POST) public String login(@Valid LoginCommand loginCommand, Errors errors, HttpServletRequest request) { if (errors.hasErrors()) { return..

Spring 2022.03.15

[Spring] 스프링 MVC(8) - Validator와 Errors/BindingResult

Validator와 Errors/BindingResult를 이용한 객체 검증 org.springframework.validation.Validator 인터페이스를 사용하면, 스프링이 제공하는 객체 검증 및 에러 메시지 지원 등의 기능을 사용할 수 있다. 컨트롤러에서 커맨드 객체의 값을 검증할 때 특히 Validator를 유용하게 사용할 수 있다. 다음 예시를 보자. public class MemberRegistValidator implements Validator { @Override public boolean supports(Class clazz) { return MemberRegistRequest.class.isAssignableFrom(clazz); } @Override public void val..

Spring 2022.03.14

[Spring] 스프링 MVC(7) - 커맨드 객체와 @ModelAttribute 어노테이션

커맨드 객체를 이용한 HTTP 요청 다음과 같이 HTTP 요청 파라미터가 많을 경우 일일이 @RequestParam 어노테이션을 사용해 코드를 작성한다면 매우 번거로울 것이다. @RequestMapping(method = RequestMethod.POST) public String regist(@RequestParam("email") String email, @RequestParam("email") String name, @RequestParam("password") String password, @RequestParam("confirmPassword") String confirmPassword) { // 이하 생략 ... return "member/registered"; } 이럴 경우 일일이 파라미터를..

Spring 2022.03.13

[Spring] 스프링 MVC(6) - @RequestParam 어노테이션

@RequestParam 어노테이션을 이용한 요청 파라미터 구하기 @RequestParam 어노테이션을 사용하면 메서드의 파라미터를 이용해서 HTTP 요청 파라미터를 받을 수 있다. 다음은 예이다. @Controller @RequestMapping("/event") public class EventController { @RequestMapping("/detail2") public String detail2(@RequestParam("id") long eventId, Model model) { Event event = getEvent(eventId); if (event == null) { return REDIRECT_EVENT_LIST; } model.addAttribute("event", event);..

Spring 2022.03.13

[Spring] 스프링 MVC(5) - @RequestMapping 어노테이션

@RequestMapping을 이용한 경로 지정 @RequestMapping 어노테이션의 값으로 경로를 지정한다. 스프링 MVC는 웹 브라우저의 요청이 들어오면 @RequestMapping의 값을 이용해서 요청을 처리할 컨트롤러 메서드를 결정한다. @Controller public class EventController { @RequestMapping("/event/list") public String list(Model model) { return "event/list"; } // 이하 생략 ... } 위 코드에서 @RequestMapping 어노테이션의 값을 "/event/list"로 지정했는데, 실제로 어떤 URL을 처리하는지는 서블릿 매핑의 URL 패턴에 따라 달라진다. 컨텍스트 경로 Dispat..

Spring 2022.03.13

[Spring] 스프링 MVC(4) - 서블릿 매핑

서블릿 매핑 컨트롤러 매핑 경로로 전체 경로를 사용하고 싶다면 다음과 같이 설정하면 된다. 서블릿 매핑 설정에서 URL 패턴을 "/"로 지정 스프링 MVC 설정에 디폴트 서블릿 핸들러를 설정 dispatcher org.springframework.web.servlet.DispatcherServlet ... dispatcher / ... ... 서블릿 매핑 설정에서 매핑 URL 패턴을 /으로 설정하면 jsp 요청을 제외한 나머지 모든 요청을 DispatcherServlet이 받게 된다. 만약 매핑된 컨트롤러가 없다면 404 응답 코드를 웹 브라우저에 전송하게 된다. 이때 404 응답 대신 컨테이너의 디폴트 서블릿을 이용해서 요청을 처리하도록 만들어주는 것이 설정이며, 다음과 같이 동작한다. 요청 URL에 ..

Spring 2022.03.12

[Spring] 스프링 MVC(3) - 스프링 MVC 설정

스프링 MVC 설정 스프링 MVC를 설정하려면 최소한 다음의 구성 요소를 빈 객체로 등록해주어야 한다. HandlerMapping 구현 객체 HandlerAdapter 구현 객체 ViewResolver 구현 객체 이 중에서 HandlerMapping과 HandlerAdapter는 다음과 같이 태그를 이용하면 설정이 끝난다. 따라서, ViewResolver만 추가로 설정해주면 된다. 태그는 다음의 두 클래스를 빈으로 등록해준다. RequestMappingHandlerMapping RequestMappingHandlerAdapter 이 두 클래스는 @Controller 어노테이션이 적용된 클래스를 컨트롤러로 사용할 수 있게 해준다. 이 두 객체 외에 태그는 JSON이나 XML 등 요청 / 응답 처리를 위해 ..

Spring 2022.03.12

[Spring] 스프링 MVC(2) - DispatcherServlet 설정

DispatcherServlet DispatcherServlet은 내부적으로 스프링 컨테이너를 생성한다. 별도의 초기화 파라미터 없이 DispatcherServlet을 설정하면, 웹 어플리케이션의 /WEB-INF/ 디렉토리에 위치한 [서블릿이름]-servlet.xml 파일을 스프링 설정 파일로 사용한다. 예를 들어, 다음과 같이 web.xml 파일을 설정했다면, DispatcherServlet은 dispatcher-servlet.xml 파일을 이용해서 스프링 컨테이너를 생성한다. dispatcher org.springframework.web.servlet.DispatcherServlet 한 개 이상의 설정 파일을 사용해야 하거나 이름이 [서블릿이름]-servlet.xml 형식이 아닌 파일을 사용해야 한다..

Spring 2022.03.12

[Spring] 스프링 MVC(1) - 기본 흐름과 구성 요소

Spring MVC 스프링 MVC는 여러 구성 요소가 맞물려 동작하기 때문에 스프링 MVC를 이용해서 웹 어플리케이션을 개발하려면 적어도 스프링 MVC가 어떤 식으로 동작하는지 이해하고 있어야 한다. 스프링 MVC는 다음 그림과 같은 과정을 거쳐 웹 브라우저에 응답을 전송하게 된다. 웹 브라우저 요청이 DispatcherServlet에 전달 HandlerMapping에서 요청 URL과 매칭 되는 컨트롤러 검색 HandlerAdapter에 처리 요청 컨트롤러 실행 결과를 리턴 컨트롤러 실행 결과를 보여줄 View 검색 View에서 응답 생성 후 웹 브라우저에 전송 위의 그림에서 각 구성 요소는 다음과 같은 역할을 수행한다. DispatcherServlet : 클라이언트의 요청을 전달받는다. 컨트롤러에게 클..

Spring 2022.03.12