Spring 42

[Spring] 스프링 MVC(14) - HandlerInterceptor

HandlerInterceptor를 이용한 인터셉터 구현 요청 경로마다 접근 제어를 다르게 해야 한다거나 사용자가 특정 URL을 요청할 때마다 접근 내역을 기록하고 싶다면 HandlerInterceptor를 사용하면 된다. HandlerInterceptor 인터페이스를 사용하면 다음의 세 가지 공통 기능을 넣을 수 있다. preHandle - 컨트롤러(핸들러) 실행 전 postHandle - 컨트롤러(핸들러) 실행 후, 뷰 실행 전 afterCompletion - 뷰 실행 후 preHandle() 메서드는 접근 권한이 없는 경우 컨트롤러를 실행하지 않거나, 컨트롤러를 실행하기 전에 컨트롤러에서 필요로 하는 정보를 생성하는 등의 작업을 수행한다. preHandle() 메서드가 false를 리턴하면 컨트롤러..

Spring 2022.04.05

[Spring] 스프링 MVC(13) - 추가 설정

WebMvcConfigurer를 이용한 커스텀 설정 WebMvcConfigurer 인터페이스는 MVC 네임스페이스를 이용한 설정과 동일한 설정을 하는데 필요한 메서드를 정의하고 있다. 예를 들어 태그는 뷰 컨트롤러를 설정할 때 사용되는데, 이와 동일한 설정을 위해 WebMvcConfigurer 인터페이스의 addViewContollers() 메서드를 이용한다. WebMvcConfigurer 인터페이스나 WebMvcConfigurerAdapter 클래스를 상속받아 구현한 클래스는 @Configuration 어노테이션을 적용해서, 설정 정보로 사용해야 한다. @Configuration @EnableWebMvc public class MvcConfiguration extends WebMvcConfigurerA..

Spring 2022.03.17

[Spring] 스프링 MVC(12) - 컨트롤러의 파라미터와 리턴 타입

@RequestMapping 어노테이션이 적용된 메서드에서 사용할 수 있는 파라미터 타입은 다음과 같다. HttpServletRequest, HttpServletResponse : 요청 / 응답 처리를 위한 서블릿 API HttpSession : HTTP 세션을 위한 서블릿 API Model, ModelMap, Map : 뷰에 데이터를 전달하기 위한 모델 @RequestParam : HTTP 요청 파라미터 값 @RequestHeader, @CookieValue : 요청 헤더와 쿠키값 @PathVariable : 경로 변수 커맨드 객체 : 요청 데이터를 저장할 객체 Errors, BindingResult : 검증 결과를 보관할 객체, 커맨드 객체 바로 뒤에 위치한다. @RequestBody(파라미터에 적용..

Spring 2022.03.16

[Spring] 스프링 MVC(11) - @ExceptionHandler, @ControllerAdvice, @ResponseStatus 어노테이션

@ExceptionHandler 어노테이션을 이용한 예외 처리 컨트롤러의 @RequestMapping 메서드를 실행하는 과정에서 예외가 발생할 때 직접 예외 처리를 하고 싶다면, @ExceptionHandler 어노테이션을 사용하면 된다. 다음 코드를 보자. @Controller public class CalculationController { @RequestMapping("/cal/divide") public String divide(Model model, @RequestParam("op1") int op1, @RequestParam("op2") int op2) { model.addAttribute("result", op1 / op2); return "cal/result"; } @ExceptionHan..

Spring 2022.03.16

[Spring] 스프링 MVC(10) - HttpSession과 @SessionAttributes 어노테이션

HttpSession 직접 사용하기 트래픽이 작거나 단일 서버에서 동작하는 웹 어플리케이션의 경우 서블릿의 HttpSession을 이용해서 사용자 로그인 상태를 유지하는 경우가 많다. HttpSession을 사용하는 가장 손쉬운 방법은 HttpSession을 컨트롤러 메서드의 파라미터로 지정하는 것이다. 다음 코드를 보자. @Controller @RequestMapping("/auth/login") public class LoginController { @RequestMapping(method = RequestMethod.POST) public String login(@Valid LoginCommand loginCommand, Errors errors, HttpSession session) { if (e..

Spring 2022.03.16

[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