JSP. 26

zhyun·2020년 12월 24일
0

JspSpring

목록 보기
31/39

1.viewlayer 프레임워크 : tiles Frameworke (presentation)
2.domainlayer 프레임워크 : 롬복
3.persistentlayer 프레임워크 : mybatis


2020.12.24 목요일

memberinsert&memberupdate controller 보면
중복코드목록

  • 캐릭터인코딩설정
  • 타일즈태우는설정

해결 => 프론트컨트롤러

프론트 컨트롤러 생성

  1. 프론트 컨트롤러 생성
    중복코드 처리할꺼고
    유일한 서블릿으로 만들고
    이제 백엔드 컨트롤러는 서블릿이 아님!

요청은 앞으로 프론트컨트롤러가 받게 된다.
insert요청이면 프론트가 insert컨트롤러로 보낸다.
update요청이면 프론트가 update컨트롤러로 보낸다.
프론트컨트롤러만 서블릿으로 만들면 되고 커멘드핸들러(백엔드컨트롤러)는 서블릿으로 안만들어도 된다.
insert&update컨트롤러는 커멘드핸들러나 백엔드컨트롤러로 불린다.
프론트컨트롤러가 어떤 요청인지 커멘드핸들러(백엔드컨트롤러)로 보내려면 매핑이란게 필요하다.
프론트와 백엔드 사이에 결합력을 어떻게 해야 맞출것인가..

해결 => 커멘드패턴 적용

커맨드패턴 적용

  • 프론트 컨트롤러가 요청분석 후 백엔드 컨트롤러에 보낸다
    백엔드가 늘어날수록 프론트컨트롤러에서 수정을 계속 해줘야한다.
    결합력을 끊어버리려면 다이렉트로 보내는 요청을 끊어버려야 하는데
    그 작업을 invoker가 reflection기반으로 백엔드컨드롤러를 호출해서 해결한다.
    백엔드 시그니처가 바뀌게 되도 invoke는 바꾸지 않아도 된다.
    그럼 다시 invoker가 어떤 요청으로 갈지 매핑정보가 있어야하는데 그걸 어노테이션을 만들어서 해결할것이다.

with@Controller

서블릿에 붙는 webservlet어노테이션을 대신하는 커스텀어노테이션을 만들것이고 그것을 백엔드 컨트롤러에 붙일것이다.
커스텀어노테이션을 수집해야하는데 컨포넌트가 그 역할을 할것이다. 어떤 컨트롤러가 어느 어노테이션을 가지고 있는지 어노테이션 트레이싱을 해야한다.
컴포넌트는 그걸 수집에서 map으로 관리할 것이다.
key는 어떤 요청이란 정보가
value는 어느 요청처리자란 정보
하나의 커멘드가 발생이 됐을때 컴포넌트가 어떤 요청인지 검색을 끝내고 다시 프론트에 보내고 프론트는 invoker에게 보낸다. invoker는 해당 백엔드 컨트롤러에게 보낸다.
백엔드에서는 작업을 끝내고 리다이렉/포워드 중에 결정이 난다.
이 논리적인 뷰네임이 invoker에게 다시 전달된다.

순서

프론트컨트롤러 → 맵가지고 있는애 → 프론트컨트롤러 → invoker → 백엔트 컨트롤러(scope, 논리적뷰네임 리턴) → invoker → 프론트 컨트롤러

리팩토링

  1. 프론트컨트롤러 생성 후 web.xml등록
  2. 기존컨트롤러 HttpServlet 상속 없애고 오버라이드 지우고
    웹서블릿 주석을 지우고 @Controller로 대체 deget or doPost
    에 @RequestMapping("/prod/prodInsert.do") 대체
  3. 기존컨트롤러 중복소스 잘라서 프론트로 옮김
  4. 커맨드 패턴 적용

개발순서

  1. FrontController
  2. Enum RequestMethod
  3. @RequestMapping
  4. @Controller
  5. RequestMapping
  6. RequestMappingInfo
profile
HI :)

0개의 댓글