스프링 347

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..

25. 프론트 컨트롤러 공통로직(뷰 추가)

String viewPath = "/WEB-INF/views/new-form.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); 기존의 공통로직 view에 관한 내용이었다. 이거는 먼저 요청의 uri로 Map에서 조회하고, 컨트롤러를 호출하면 그게 viewPath 정보를 가진 MyView라는 객체를 반환하게 할거다. 그러면 MyView.render()해주면 JSP로 forward 해주게끔 할거다. 어차피 request, response에다가 SetAttribute()로 정보까지 저장 가능해서 그거 다 넘겨버리면 된다. @WebServlet(name =..

24. 프론트 컨트롤러 도입.

public interface ControllerV1 { void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; } 인터페이스를 만든다. 기존의 HttpServlet같은, 그렇지만 이건 요청이 들어오면 호출하는게 아니기 때문에. 하지만 구조는 같다. request, response 받고 예외도 똑같이. List, Save, Form 기존의 것을 그대로 사용했다. public class MemberFormControllerV1 implements ControllerV1 { @Override public void process(HttpServletRequest reque..

21. MVC 적용

서블릿은 컨트롤러로, JSP는 뷰로 사용할 거 모델은 request로 사용할거다. request.setAttribute()에 임시로 값을 저장할 수 있었어서. mvc패턴은 항상 컨트롤러 거처서 view로 가야 함. @WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form") public class MvcMemberFormServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { St..