스프링/3. 스프링 MVC 54

34. 스프링 MVC

@RequestMapping 이거 쓰면 이거 관련 핸들러맵핑(맵핑은 컨트롤러의 종류의 정보를 담고있는 컨트롤러 종류 정보의 집합)이랑 이거관련 핸들러 어댑터 씀. 거의 실무에서는 저거 씀. @Controller public class SpringMemberFormControllerV1 { @RequestMapping("/springmvc/v1/members/new-form") public ModelAndView process(){ System.out.println("SpringMemberFormControllerV1.process"); return new ModelAndView("new-form"); } } @Controller가 뭐냐면, @Component + @RequestMapping이다. 그러면 ..

33. 뷰 리졸버

@Component("/springmvc/old-controller") public class OldController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("OldController.handleRequest"); return new ModelAndView("new-form"); } } 제대로 제기능을 하게 끔 ModelAndView를 반환토록 했다. 이렇게 논리이름을 넣어서 반환하도록 했다. 그렇지만 이렇게 하면 당연히 안된다.. 우리가 실제 물리이름..

32. 핸들러매핑, 핸들러어댑터

@Component("/springmvc/old-controller") public class OldController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("OldController.handleRequest"); return null; } } 과거 버전이다. Controller와 이노테이션인 @Controller와는 다르다. 스프링이 등록해놓은 핸들러매핑과 핸들러어댑터 종류를 몇가지만 소개하겠다. 핸들러 맵핑 RequestMappingHandlerMa..

31. 스프링 MVC 구조

이름만 바뀌고 내가 만들었던 mvc 구조랑 똑같다. 디스패처를 루트로 설정해놔, (urlPatterns="/*") 모든 요청을 저걸통해 받는다. 그 다음, uri(여기선 헤더에 있는 정보등 더 많은 정보를 이용한다)를 조회해 핸들러 mappingMap에 있는 것들 중 있으면 handler를 가져온다. 그 다음, 그 handler로 handlerAdapters를 조회해 어댑터를 가져온다. 그 다음, 그걸로 handle(service)해주면 그것이 ModelAndView를 반환한다. 그걸 viewResolver를 통해 논리 이름을 물리 이름으로 바꿔주고, 그 물리 이름이 포함된 View를 반환해 준다. 이 View.render()로 화면을 그려 response에 넣어 응답해준다. 여기 있는 대부분이 inte..

30. 어댑터 패턴 정리

컨트롤러의 process()가 public 이므로 service에서 실행할 수도 있지만, 어댑터에게 위임해줬기에 우리가 원하는 그러니까, 연결되는 형태로의 결과값을 받을 수 있다. 어댑터가 컨트롤러가 가진 정보와, 내가 필요한 정보를 잘 엮어서 전해줬기 때문이다. @RequestMapping("/hello") 이게 바로 에노테이션 형식 처리해주는 어댑터랑 맵핑해주는..

28. 유연한 컨트롤러

어댑터 패턴에 관한 것이다. 그러니까, 왜 노트북이나 그런 거 보면 규격에 맞게 전기코드 끝 부분이 다르다. 그러면 우리가 젠더같은 걸 사서 끼워서 노트북같은 제품의 규격에 맞게 해서 끼우기도 하는데, 여기서 젠더같은 걸 어댑터, 라고 한다. 컨트롤러(여기선 핸들러라고 부름)는 원래 전기코드다. 위에서 보면 매핑정보를 확인하고, 핸들러 어댑터에서 맞는 어댑터(젠더)를 가져오고, 그 어댑터와 함께 핸들러(컨트롤러)를 호출한다. 아니, 이제는 어댑터로 컨트롤러를 호출한다. 즉, 요청이 들어오면 핸들러 매핑정보를 찾아서 처리할 수 있는 요청인지 확인하고, 처리할 수 있는 요청이라면 핸들러 어댑터 목록에서 가져온다. 그리고 이 핸들러 어댑터에서 컨트롤러를 호출하고, 이 과정을 거치며 ModelView가 생성되고..

26. 모델 추가

기존 모델을 request로 썼었다. 이제는 컨트롤러에서 호출 시 MyView가 아닌 Model과 View가 섞인 ModelView를 반환, 또 바뀐점은 컨트롤러는 이제 /WEB-INF/views/save-result.jsp 이런 full path가 아닌 save-result논리 경로만 생각한다. 그리고, viewResolver를 호출하면 MyView를 반환. 이 viewResolver에서 full path를 만들어서 반환해서 MyView로 반환해 준다. @WebServlet(name="frontControllerServletV3", urlPatterns = "/front-controller/v3/*") public class FrontControllerServletV3 extends HttpServle..