Spring/Spring MVC

    뷰 컨트롤러

    모델 데이터나 사용자 입력을 처리하지 않는 간단한 컨트롤러의 경우, 뷰에 요청을 전달하는 일만 하는 컨트롤러를 선언할 수 있다. 뷰 컨트롤러는 WebMvcConfigurer 인터페이스를 구현해야 하며, WebMvcConfigurer는 스프링 MVC를 구성하는 메서드를 정의하고 있다. WebMvcConfigurer는 인터페이스임에도 불구하고, 정의된 모든 메서드의 기본적인 구현을 제공하므로, 필요한 메서드만 선택해서 오버라이딩하면 된다. @Configuration public class WebConfig implements WebMvcConfigurer { // 뷰 컨트롤러 @Override public void addViewControllers(ViewControllerRegistry registry) ..

    컨트롤러 요청과 응답

    HTTP 요청 헤더 조회 MultiValueMap은 하나의 키에 여러 값을 받을 수 있기 때문에 HTTP 헤더, HTTP 쿼리 파라미터와 같이 하나의 키에 여러 값을 받을 때 사용한다. @Slf4j @RestController public class RequestHeaderController { @RequestMapping("/headers") public String headers(HttpServletRequest request, HttpServletResponse response, HttpMethod httpMethod, Locale locale, @RequestHeader MultiValueMap headerMap, @RequestHeader("host") String host, @CookieVal..

    서블릿, JSP, MVC 패턴

    서블릿 서블릿은 자바로 웹 페이지를 동적으로 생성하는 서버 프로그램으로, 자바 코드 안에 HTML을 포함한다. 서블릿을 사용하면 동적으로 원하는 HTML을 만들 수 있으나, 자바 코드에 HTML을 만들어야 하므로 매우 복잡하고 비효율적 @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form") public class MemberFormServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest re..

    @Valid 유효성 검사

    Form 유효성 검사가 필요한 필드에 검증 어노테이션을 지정한다. @Getter @Setter public class PersonForm { @NotNull @Size(min=2, max=30) private String name; @NotNull @Min(18) private Integer age; } 검증 어노테이션 @NotNull Null 불가 @Null Null만 입력 가능 @NotEmpty Null, 빈 문자열 불가 @NotBlank Null, 빈 문자열, 스페이스만 있는 문자열 불가 @Size(min=, max=) 문자열, 배열등의 크기의 허용 범위 안에 있는지 @Patten(regex=) 정규식을 만족하는지 @Max(), @Min() 지정된 값보다 작은지, 큰지 @Future, @Future..

    스프링 MVC 구조

    스프링 MVC 전체 구조 클라이언트로부터 HTTP 요청 디스패처 서블릿이 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러) 조회 찾은 핸들러를 처리할 수 있는 핸들러 어댑터 실행 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환 뷰 리졸버를 실행하면 뷰의 논리 이름을 물리 이름으로 바꿔서 뷰를 찾고 반환 뷰를 통해서 뷰 렌더링 디스패처 서블릿 서블릿으로 동작하는 스프링 MVC의 프론트 컨트롤러로, 부모 클래스에서 HttpServlet을 상속받아서 사용한다. 부모 클래스인 FrameworkSerlvet에서 doService()를 오버라이딩 해두고, doServie()를 시작으로 여러 메서드들과 함께 doDispatch()가 호출된다. doDispatch() 메서드는 ..