티스토리 뷰
728x90
반응형
1. MVC 프레임워크
(1) 스프링 웹 MVC 프레임워크 구조
- ①, ②, ③ 순서대로 프로세스가 진행된다.
- 요청이 들어오면 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을 수행하고 ModelAndView를 return 하도록 구현한다.
- 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)
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완
728x90
반응형
'Study > FastCampus' 카테고리의 다른 글
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - Reflaction 및 Spring MVC와 비교하기 (0) | 2023.08.21 |
---|---|
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - DI 프레임워크 (0) | 2023.08.20 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 프런트 컨트롤러 (0) | 2023.08.18 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - DB 커넥션 풀 (0) | 2023.08.17 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - JDBC 프로그래밍 (0) | 2023.08.16 |
댓글