Spring MVC Architecture
- HandlerAdapter가 model 에 담겨있던 데이터를 request scope에 옮겨 담아줌 (기존처럼 backend controller에서 request에 데이터 넣는게아님)
- HandlerAdpater가 다시 viewname을 dispatcherservlet에게 넘김
- Spring Legacy Project 생성
- Spring MVC Project 선택 - springMVCDummy로 이름짓고 next
- Spring 개발에 적합한 프로젝트 다운로드 경고창 Yes
- kr.or.ddit 로 basepackage
- ddit라는 기관명이 ContextPath가 됨
- localhost/ddit (localhost/springMVCDummy 가 아님)
maven: 디펜던시제공, 일정개발툴 제공
운영중인 프로그램에 투입되었다면?
- pom.xml의 dependencies 확인
- 문열고 filter-chain 가장 먼저 만날테니 web.xml확인
1) Listener확인: init callback에서 container 객체 생성
2) Listener에서 만드는 container의 xml은 context-param에 주소가 있음 (부모컨테이너)
3) 서블릿 내에서 자식 컨테이너가 만들어져 계층구조가 형성됨
리포팅용도 스탠드얼론 하나의 컨텍스트
웹 요청처리 하나의 컨텍스트
둘의 컨텍스트가 공통적으로 서비스,다오를 써야하니 parent에 bean을 등록
파일처리
- 우리 프레임워크: 프론트 이전에 파일체크필터작동
- 스프링: 프론트 이후에 파일처리
- 우린 그동안 서블릿3.0이어서 프론트를 multipartconfig를 등록해서 썼지만 2.5여서 뭐하나만 등록해서 써먹으면 끝이라구??
webStudy04
- web.xml(톰캣)의 defaultServlet이 동적,정적요청 전부처리중, 매핑이 / 이걸로 걸려있는데 스프링도 /라고 했어..
- 그럼이제 정적자원에 대한 처리가 안되는거임 톰캣으로
- 그래서 스프링에서 이제 설정으로 처리하여 정적차원을 처리해줘야함
- 반드시고려할것: 슬래시 매핑을했을때 정적차원에 대한 처리를 어떻게 할것인지...
characterEncodingFilter
public CharacterEncodingFilter(String encoding, boolean forceEncoding) {
this(encoding, forceEncoding, forceEncoding);
}
true: 내껄로 강제화시키겠다 -> 어떤경우에도 encoding을 utf-8
servlet-context.xml
- 디스패처서블릿이 servlet-context.xml로 컨테이너를만듬
- 그 디스패처서블릿이 핸들러매핑,핸들러어댑터, 뷰리졸버를써야한다
- 그러므로 servlet-context에 ㄱ그 셋이 등록이 되어있어야한다
<annotation-driven></annotation-driven>
이걸로 등록해주는데 3개말고 26개가 전부 등록됨
- 근데 문제는 기본값으로 등록이 되는것임
- view resolver에는 적어도 기본이아니라 /WEB-INF/VIEWS와 .jsp라는 설정값을 등록해줘야함
같은일을하는애가여럿이면 그중에순서가중요 -> 뷰리졸버
- IRVR의 기본특성: 본인이 찾지못하면 무조건 404내보내기때문에 제일 나중에 되도록 -> 아예 p:order를 주지않음 -> 그럼 integer로 줄수있는 가장큰값을줘서 맨뒤로밀림