패키지 관리
클래스 타입 중심 VS 기능 중심
Q. 왜 000 중심으로 패키지 관리 하셨어요?
버전01: 개발자가 직접 만든 DispatcherServlet 사용
우리가 만든 DispatcherServlet에는 다음 역할을 하는 init-method="init"
1. 멤버 변수 초기화
2. 생성자
3. setter
4. @Autowired
5. DI(의존성 주입)
6. init() 메서드
개발자가 직접 만든 Controller 인터페이스 사용
output이 ActionForward
버전02: Spring 프레임워크에서 제공하는 DispatcherServlet 사용
버전02에서도 DI를 위한 xml이 필요하다
dispatcher-servlet.xml
presentation layer(표현 계층)가 생겼다!
spring에서 제공하는 인코딩 필터를 쓰자
not POJO(Servlet, Filter, Listener)에 대한 객체 등록은 서블릿 컨테이너가 담당
서블릿 컨테이너의 설정 파일인 web.xml에서 해야한다!!!
View Resolver가 등장하면서 String으로 변경됨
어디로(경로), 어떻게(리다이렉트, 포워드)
기존에는 request를 통해 전달
현재는 ModelAndView 객체를 통해 전달
Spring에서 제공하는 HandlerMapping을 사용하면
DI로 setter 주입을 사용
특정 페이지의 URL을 알면 별도의 권한이 없어도 접근이 가능한 경우가 있다
이를 막기 위해 Controller 파트에서 별도의 접근 권한 유효성 검사를 구현해야만 한다
Spring에서는 애초에 페이지를 WEB-INF 폴더에 은닉(하이딩)하여 저장함
WEB-INF 폴더의 하위는 오직 VR을 통해서만 접근 가능함을 이용한 것!!
버전03: @ 추가
@Component + "implements Controller" => @Controller
@Override를 할 필요가 없어서 메서드 시그니처 강제가 안 된다
자유도가 높은 대신 개발자가 실수할 가능성이 생긴다
서로 관련된 기능을 작성할 수 있음 == 코드의 응집도가 높아짐
@RequestMapping(value="/login.do", method=RequestMethod.POST)
output으로 String 권장
요청 방식이 GET, POST, ...인지 쓰는 것을 권장
기타
중프 때 했던 비동기 Servlet -> 최프 때 Controller 흡수 예정