6/24 프로젝트 3차

박세현·2024년 6월 24일
0

3차 프로젝트

목록 보기
12/14

1. 요청



2. DispatcherServlet(모든 요청과 응답의 창구)

  • service() : 모든
  • BeanContainer bc = BeanContainer.getInstance(); : 객체 컨테이너
  •   bc.addBean(HttpServletRequest.class.getName(), request);
              bc.addBean(HttpServletResponse.class.getName(), response);
              bc.addBean(HttpSession.class.getName(), request.getSession());
    서블릿 기본 객체 : 매 요청시마다 바뀌어야 하기 때문에 매번 객체 생성해줘야 하는객체라 직접 생성
  • bc.loadBeans(); : 모든 객체를 불러옴
  •   RouterService service = bc.getBean(RouterService.class);
                    service.route(request, response);
    라우터 역할


    ㄴ 핸들러 매핑 : 요청이 들어오면 해당 컨트롤러랑 메서드를 찾아줌

    ㄴ 핸들러 매핑=널(해당 컨트롤러를 못찾음) -> 웹스테틱 올 업로드 경로쪽으로 라우팅 -> 그래도 없다 -> 낫파운드(404)

    ㄴ 웹스테틱 올 업로드 경로

    ㄴ 낫파운드(404)

    ㄴ 핸들러 어댑터 : 찾았으면 찾은 컨트롤러와 메서드 기능을 실행해주는 역할

    ㄴ 우리가 정의한 예외? -> 우리가 정의한 페이지 및 응답코드 보여줌
    ㄴ 서블릿 기본예외는 응답코드 500


3. BeanContainer::loadBeans() : 모든 관리 객체 로드(객체 생성 및 의존성 주입)

  • 특정 애노테이션이 있는 객체를 자동 생성, 의존하는 객체 주입
    • @Controller : 컨트롤러 역할 객체
    • @RestController : 컨트롤러 역할 객체 - 응답시 JSON 형태로 응답
    • @Service :
    • @Component :
    • @ControllerAdvice : @Controller의 공통처리
    • @RestControllerAdvice : @RestController의 공통처리
  • private Map<String, Object> beans; : 관리 객체를 map형태로 (싱글톤)
    • 키값 : 전체클래스명
    • object : 객체 공간?
  • private MapperProvider mapperProvider; : 마이바티스 객체를 싱글톤으로 하면 db업데이트가 안되니까 매번 객체 생성하도록 따로 뺌
    • 싱글톤❌ : HttpServlet resp, req, 마이바티스 매버객체
  • public void loadBeans()
    • getResource("../../../").getPath()) : 컴파일된 클래스 파일 기준
    • getClass().getResource(...) : 현재 클래스파일(BeanContainer) 물리적 경로
      build/.../BeanContainer.class(자바파일로 하면 안됨)



      ㄴ 모든 파일

      ㄴ 동적객체생성?

      ㄴ 관리객체

      ㄴ 생성자가 한개만 있어야 함
      ㄴ 생성자가 2개이면 뭘 써야 할 지 알수 없기 때문에 생성자 1개만 정의하고 호출

      ㄴ 의존성을 재귀적으로 해결(의존성의 의존성도 객체 생성) / 의존성 : 생성자 매개변수

      ㄴ 의존성의 의존성 객체생성해주는 역할

      ㄴ 이미해결된 의존성이 있으면 이미생성된걸 추가?

      ㄴ 생성자 매개변수 자료형 쳌
      ㄴ if : 매개변수가 없으면 바로 객체 생성
      ㄴ else : 매개변수가 있는 경우

      ㄴ 의존성에 의존성이 있는경우 매퍼 객체도 생성하게끔

      ㄴ 빈에 객체가 없으면 객체로 생성
      ㄴ 빈에 이미 객체가 있으면 가져오기?

      ㄴ 재귀적으로 매개변수를 체크해보면서 객체생성
      ㄴ 함수에 함수를 호출해서 의존성에 의존성을 체크하는 구조


4. HandlerMapping - HandlerMappingImpl : 요청에 맞는 컨트롤러 객체 및 메서드 조회

@Controller, @RestController 에 정의된 하기 애노테이션

  • @RequestMapping : 모든 요청메서드에 매칭
  • @GetMapping : GET 요청 메서드에 매칭
  • @PostMapping : POST 요청 메서드에 매칭
  • @PatchMapping : PATCH 요청 메서드에 매칭
  • @PutMapping : PUT...
  • @DeleteMapping : Delete

반환값 : 템플리 찾기

ㄴ 반환값 : item - 컨트롤러객체 / m- 메서드 객체

ㄴ 컨트롤러패턴타입인지 메서드패턴타입인지 구분하는 역할



5. HandlerAdapter - HandlerAdapterImpl

1) 찾은 컨트롤러의 메서드 실행하여 유입된 요청을 처리

2) 각 컨트롤러의 반환값

  • @Controller인 경우 : 템플릿(/WEB-INF/templates/ + 반환값 + ".jsp")로 경로 찾아 출력 버퍼 교체
  • @RestController인 경우 : 반환값은 자바 객체가 되며 JSON 형태({"이름": "값", "이름" : "값" .. })으로 출력
    • 요청데이터 메서드 매개변수 주입
      • @PathVariable : 경로변수
      • @RequestParam("이름") : 요청 데이터
    • void setEmail(String nail)

3) 컨트롤러를 찾지 못한 경우

  • StaticResourceMapping - StaticResourceMappingImpl - 웹 정적 경로인 /webapp/static/에서 파일이 있는지 체크 하고 출력
  • 웹 정적 경로에서도 못찾는다면 설정한 파일 업로드 경로에서 찾음

ㄴ 리플렉션api를 활용해 동적 객체 생성 및 메서드 실행

ㄴ 겟 포스트.. 거기에 따른 에노테이션을 찾음

ㄴ 요청데이터가 많은경우

ㄴ 데이터클래스에 정의하면 알아서 setter호출?

profile
귤귤

0개의 댓글

관련 채용 정보