WEB Application

웹 프로그래밍 (xml 주의할 점, front controller 패턴 )

Tech Signal 2020. 9. 22. 21:50

<Service 인터페이스 만들 때 주의할 점>

public int createProd(ProdVO prod);

Service에서 리턴타입을 int로 하면 식별성 없음. (dao에선 가공을 못하므로 int로 할 수 밖에 없음)

 

insert, update할 때 null허용일 때는 JDBCType 꼭~!

 

DATE -> jdbcType=DATE

CLOB ->  jdbcType=VARCHAR

NUMBER ->  jdbcType=NUMERIC

 


<Controller>

컨트롤러에서 항상 반복되는 코드들

   처음에 req.setCharacterEncoding("UTF-8");

   마지막에 req.getRequestDispatcher(goPage).forward(req, resp);

 

 

Front Controller 들이 할 일

- 각 커맨드(URI에 연결되어있음)를 처리할 수 있는 백엔드 컨트롤러 목록을 컬렉션(맵)의 형태로 저장

    Map <URI, Controller>

- 각 커맨드에 맞게 위임 (백엔드 컨트롤러들은 요청을 직접 받지 않으므로 서블렛일 필요가 없음)

 

=> Front Controller가 유일한 서블렛이 됨. 뒷단의 백엔드 컨트롤러(Command Handler)들은 POJO(Plain Old Java Object)가 된다

 

POJO: 어떠한 것도 상속 받지 않음. JRE만 있으면 실행 가능

 

각 POJO 들이 어떤 메서드를 가지고있는지   고정된 코드가 없어도  알아내야함 => 리플렉션이 필요한 이유

 

 

 

핸들러 만들때는 controller들 서블렛 안 붙이고 @CommandHandler붙여주기 (마킹)

실제로는 method에서 완성되므로 1커맨드 할때 1메서드니까 해당 메서드위에 @URIMapping

String을 리턴하는 메서드로 만들고

access modifier는 public으로

서블렛 매핑

 

 

 

Handler매퍼가 reflection 해서 수집

커맨드를 식별할때 주소/ 메서드 2개다 파악해야함. 그래서 만드는게 Mapping Condition

 

수집해서 map 만듦. 검색-> urimappinginfo로 돌려줌 거기있는 핸들러 정보를 바탕으로 찾아야됨 근데 다 pojo라 고정된 시그니처없음. 고정코드로 호출못하니까 invoker불름. handlermapper가 돌려주는 정보 invoker한테 보냄 -> commandhancler-> 파라미터로 보내주는 logical view name를 invoker한테보냄 -> frontcontroller가 받아서 viewProcessor 가 받음. 받아서 prefix, suffix 받아서 응답 내보냄  



 

>> Front Controller 패턴 사용하는 법 보러가기 클릭 <<

>> Front Controller 패턴 사용하는 법 보러가기 클릭 <<

 

FrontController를 이용한 웹 프로그래밍

미리 총정리하는 이 구조의 동작 원리

www.notion.so