티스토리 뷰

728x90
반응형

1. MVC 프레임워크

(1) 스프링 웹 MVC 프레임워크 구조

출처: 패스트캠퍼스 강의 내용 중 MVC 프레임워크 만들기 Ch06 자료

  • ①, ②, ③ 순서대로 프로세스가 진행된다.
  • 요청이 들어오면 Dispatcher Servlet이 요청을 받아 Handler Mapping을 통해 적절한 핸들러(컨트롤러)를 찾아 보내게 된다.
  • 핸들러는 view name을 return 한다.
  • Dispatcher Servlet는 return 받은 view name을 가지고 View Resolver를 통해 View 객체를 return 받게 된다.
  • 최종적으로 view render를 응답 값을 return 하게 된다.

 

2. MVC 프레임워크 실습

(1) 목표

  • DispatcherServlet
  • AnnotationHandlerMapping
  • HandlerAdapter
  • ViewResolver

(2) mvc-practice 프로젝트 생성

  • 프런트 컨트롤러 실습 때 생성된 프로젝트를 활용한다.

(3) 구현 참고사항

  • 프런트 컨트롤러 실습 때 RequestMappingHandlerMapping 아래 하나의 컨트롤러만 생성하였는데, 그 외에 새로운 컨트롤러들을 추가할 수 있다.
  • RequestMappingHandlerMapping : url path와 Controller를 매핑
void init() {
    mappings.put("/", new HomeController());
    mappings.put("/users", new UserListController());
}

@Override
public Controller findHandler(HandlerKey handlerKey) {
    return mappings.get(handlerKey);
}
  • Controller
    • UserListController : user의 목록(/user/list jsp -> webapps 아래 생성)return
    • UserCreateController : 요청으로 받은 userID와 name을 가지고 User 객체를 새로 생성하여 UserRepository에 저장한 뒤, “redirect:/users”를 return 하여 GET /users가 실행되도록 한다. 즉, User 정보를 저장한 뒤, UserListController가 실행된다. (User class는 mvc/model 아래 생성하고, mvc/repository 아래 UserRepository class를 생성한다.
    • ForwardController : user/form jsp를 return 한다. (form 페이지는 userID와 name을 작성하여 POST /users로 보내는 웹 페이지이다.)
    • 이 때 생성된 컨트롤러도 implements Controller로 인터페이스를 구현한다.
  • 같은 url 주소를 갖지만 GET, POST, PUT, DELETE를 분리하기 위하여 HandlerKey 객체를 생성한다.
    • HandlerKey의 필드에는 requestMethod와 uriPath를 설정한다.
  • RequestMethod는 enum으로 생성하여 GET, POST, PUT, DELETE를 추가한다.
  • Map을 사용을 할 때, 키끼리 비교를 함으로 HandlerKey 객체끼리 비교를 할 수 있도록 HandlerKey 객체에 equals() and hashCode()를 추가한다.
  • Forward vs Redirect
    • View 인터페이스를 생성하고, JspView 클래스를 생성한다. JspView는 이전에 작성했던 forward 코드를 그대로 가져와도 된다. RedirectView에서는 “redirect:” 부분을 잘라서 sendRedirect를 해준다. 
    • ViewResolver를 인터페이스로 생성하고, JspViewResolver class를 생성하여 “redirect:”가 포함되면 REdirectView를, 포함되지 않는다면 viewName에 “.jsp"를 붙여 JspView를 생성하여 return 해준다.
  • 한글이 깨질 경우, Servlet의 Filter를 implement하여 CharactoerEncodingFilter를 작성해준다.
    • @WebFilter(“/*”) 어노테이션을 제일 상단에 추가하고, doFilter 메소드에 request와 response 모두 setCharacterEncoding(“UTF-8”)을 적용한다. 이후 chain.doFilter(request, response); 를 해주면 된다.
  • HandlerAdapter의 인터페이스를 생성한다. HandlerAdapter는 전달된 핸들러를 지원하는 Adapter 인지 Boolean 값으로 return하고, 만약 지원한다면 handle을 수행하고 ModelAndViewreturn 하도록 구현한다.
  • SimpleControllerHandlerAdapter class를 생성하고, 만약 전달된 핸들러가 controller 인터페이스를 구현한 구현체라면, 핸들러를 controller로 타입캐스팅을 해주고, handleRequest를 통해 viewName (ex. home) return 받는다. ModelAndView에 해당 viewName을 전달하여 return 해준다.
    • @Target({ElementType.TYPE}) : ElementType.TYPE으로 해야지 class에 붙일 수 있는 어노테이션이 된다. ElementType.Method로 설정하면 메소드에도 붙일 수 있는 어노테이션이 된다.
    • 또한 @Retention(RetentionPolicy.RUNTIME)까지 붙여서 public @interface Controller를 생성하면 Controller 인터페이스를 어노테이션으로 바꿀 수 있다.
  • 어노테이션으로 바꾸는 이유는 기존에 Controller 인터페이스를 생성했어야 하는 것을 어노테이션만 붙여서 알아서 핸들러가 찾도록 할 수 있기 때문이다.

 

  • 단축키 모음
    • ctrl+d : 한 줄을 복사하여 바로 아래에 붙여넣기
    • ctrl+p : 현재 위치한 메서드의 파라미터 정보를 조회
    • ctrl + Alt + c : 상수로 설정
    • ctrl + f4 : 열린 창 닫기 (하나씩)
    • ctrl + e : 최근 파일 (최근 열린 파일 목록)
    • shift + f6 : rename
  • java 함수
    • substring(2) : 2번째 이후의 값을 return (substring(“redirect:”.length()) 를 사용하면 redirect: 이후의 값 return)

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/43z0P6S

 

 

#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완

728x90
반응형
댓글