MVC2

Walter Mitty·2023년 1월 31일
0
post-custom-banner

  • 스프링 웹 컨테이너가 이제 Spring Bean 뿐만 아니라 Controller도 관리가 가능해졌다.

  • @ResponseBody: 5,6,7,8 번을 쓰지 않고 그대로 값을 가져다 쓰겠다.
    • View Resolver의 도움을 받지 않음 = 직접 응답을 하곘다.
      - 근데 일반객체 Map은 String이 아니라서 Json 형태로 컨버트를 해서 응답을 해줘야 한다.

  • <mvc:annotation-driven> 는 내장된 메시지 컨버터를 통해 응답되는 내용이 json문자열로 컨버트 되게 한다.
    • 기본 잭슨 라이브러리를 이용해서 Json으로 자동 컨버팅되어 반환된다.
    • 안되면 pom.xml에가서 세번째 탭에서 Jackson 라이브러리를 찾아보자~
    • Map 타입 객체가 Json 문자열로 잘 반환되는 걸 볼 수 있다!

  • param이 아니라 body에 JSON형식으로 보내주면 그대로 응답이 된다.
    근데 왜 null이..
    • 이유는 @RequestBody를 놓침!!!

      - 응답시 Json형태로 응답을 받으려면 @ResponseBody를 써줘야한다.
      - 요청 전달 데이터는 @RequestParam
      - 한번에 둘 다는 안됨!
  • 코드스니펫
    • 요청을 할 때 요청 전달 데이터만 보내거나 or JSON 문자열을 보내거나
      • 짬뽕도 안되고 같이 보내는 것도 안된다.
    • 이미 JSON.stringify()로 data를 보내기 때문에!
    • one에 값을 줘도 null로 들어가는 걸 볼 수 있다.
    • 같이 보내보면 둘 다 null이 들어간다.
      • 이미지 파일등은 form-data 형식으로 보내줘야 한다.

  • 응답결과에 요청속성 attr1의 값은 test 입니다.를 볼 수 있다.
    • ModelAndView 객체가 생성되어 값 "test"는 Model 영역에 등록된다.
      • Request의 Attribute...
      • Model과 View를 같이 이렇게 해줘도되고
      • jsp에서 .setAttribute 라고 생각하면 된다.
  • 따로 해줘도된다. 아래처럼!
  1. mvc/o url 요청
  • 핸들러가 o() 메서드를 찾는다.
  • Handler Adapter가 Model 타입의 객체를 하나 만들어서 o()메서드의 파라미터로 보내주게 된다.
  • key=attr1 value=testtest
  • Model에 담긴 이 Attribute들이 객체의 attr로 채워진다.같은 메모리 참조...
  1. mvc/n url 요청
    ModelAndView 타입으로 객체 생성해서 값을 세팅.
    핸들러 어답터가 호출을 하러가는데 그때 코딩을 통해서 모댈엔뷰 객체가 생기고, 모델객체가 생기고 뷰는 네임을 할당한다.

이렇게 하는 이유는 다양한 매개변수를 쓰고 다양한 반환형을 쓰면서 유연하게 하려고하는 것이다.
다양한 경우의 수를 처리할 수 있게된다.

  • 파라미터가 session 타입인 경우!
    • 아직 session이 없어서 null이 나온다.
    • 가능하다는 것만 확인해보자!

  • myApplicationContext.xml 과 myServletContext.xml 중 뭐가 먼저 로드되는게 좋을까?
    • myApplicationContext.xml이다. 오래걸리고 구동하는데 시간이 더 걸리고 무거운 백엔드부터 건드리는게 맞고 Controller와 맞닿아 있는 myServletContext.xml을 나중에 하는게 좋다.
    • 오른쪽 컨테이너가 먼저 스프링빈이 되고 그다음 왼쪽!

  • 서블릿 컨텍스트 객체는 자동생성되는 객체고, 이 객체가 생성되어야 요청을 처리할 수 있다.

    • 톰캣이 구동 될 때 서블릿 컨텍스트 타입의 객체가 생성되고, 요청이 이루어짐.
      • 서블릿컨텍스트 생성을 감시하는게 컨텍스트 리스너이다.
      • 사라지거나 소멸을 감지하는 것도 컨텍스트 리스너이다.
  • 리퀘스트 객체는 요청할 때마다 생기는데 생성/소멸을 감지하는 것도 컨텍스트 리스너이다

  • 세션 객체도 생성됨과 소멸됨을 감시하는 감시자가 있다.

  • 감시자를 만드는 방법

    • 리스너 선택해서 클래스 만듦.
      • 어떤 용도로 만들건지 선택해줘야한다.
        • 무엇을 감시할지 체크체크.

  • Lifecycle을 클릭하면 세션의 라이프사이클 생성 소멸을 감지할 수 있다.

Spring에서 지원하는 감시자도 있다.

  • 서블릿컨텍스트 리스너를 상속받고 있다.

  • 웹에 관련된 빈들도 관리돌 수 있는 Spring WebApplicationContext

    • WebApplicationContext 타입의 객체를 반환한다.
      • 리스너가 없을 때는 디스패처서블릿만 가지고 객체를 만들었다.
      • 그러나 리스너가 있을 때는 톰캣서버가 구동되고 객체가 생성되자마자 WebApplicationContext타입의 객체를 미리 만들어둔다.
  • ContextLoaderListener가 initWebApplicationContext() 메서드 호출, servletContext객체를 찾아오고, servletContext에 ..

순서

  • ①번작업 : 스프링 컨테이너 먼저 만들어 놓기
    • Tomcat 구동 → ServletContext 객체 생성 → ContextLoaderListener 감시자의 contextInitialized() 메서드 호출 → ServletContext 객체의 parameter중 contextConfigLocation 값 찾기 ex)/WEB-INF/myApplicationContext2.xml → xml 문서 읽어서 Spring WebApplicationContext 생성 → Spring WebApplicationContext 반환

  • ②번작업 : 스프링 컨테이너를 보강하기
    • DispatcherServlet 객체 생성 → Spring WebApplicationContext 사용 → DispatcherServlet의 parameter로 등록되어있는 contextConfigLocation의 값을 찾아낸다 ex) /WEB-INF/myServletContext.xml → xml문서 읽어서 Spring WebApplicationContext를 조금 더 Update/Upgrade 시킨다(보강한다).

  • class path resource [config.xml] cannot be opened because it does not exist 에러메시지 뜬다.

요청과 응답에 관련된 xml파일에 CORS 설정 넣기.
ex) myServletContext.xml


  • CustomerService()에 어노테이션 까먹어서 달아줌.
    • 그래도 에러남
post-custom-banner

0개의 댓글