처음 스프링을 공부 했을때, 왜 home.jsp가 실행되지 않는지 이해를 못 했습니다.
근데 사실 아주 간단하지 않은 간단한 구조를 갖고 있었습니다.
home.jsp 에서 바로 실행을 하게 되면 아래와 같이 404 에러가 발생 합니다.
왜냐하면, WEB-INF는 보안의 이유때문에 직접 접근이 불가능 합니다.
해당 폴더에는 프로젝트의 환경 설정을 해주는 중요한 파일들이 존재하게 됩니다.
예를들어, DB 를 사용한다면 WEB-INF폴더에 저장된 DB의 ID, PW가
적나라게 드러나기 때문입니다.
그렇다면 어떻게 접근 해야 할까요?
스프링 프로젝트의 기본 home.jsp 작동 원리를 이해 하시려면,
밑의 프로젝트 구조를 알아야 합니다.
webapp 의 WEB-INF 폴더 안에는 web.xml 이란 파일이 존재합니다.
*web.xml 은 프로젝트의 환경 설정을 해주는 파일
프로젝트가 실행되면 web.xml 이 가장 먼저 실행되고, 그 다음
DispatcherServlet이 해당 프로젝트로 들어오는 요청들을 낚아채고 핸들링 해줍니다.
그 낚아챈 요청들은 servlet-context.xml로 보내주게 됩니다.
그렇게 요청을 받은 servlet-context.xml 은
① : <annotation-driven /> 란 태그를 사용하여 @(어노태이션)을 사용할 수 있고,
그 어노태이션의 사용 위치는(패키지명:Home_Test)
② : <context:component-scan base-package="aaa.bbb.(패키지명)" />
해당 패키지명 내부의 클래스들입니다.(클래스명:HomeController.java)
@RequestMapping의 value가 "/" 인데 이것의 의미는 프로젝트명 이후에
아무런 주소없이 실행을 시키면 해당 메소드를 실행 시키라는 뜻입니다.
addAttribute는 model객체에 "serverTime"이란 이름으로 현재 시간을 담은것이고,
return "home"은 위의 servlet-context.xml에서 설정한
preffix와 suffix를 앞 뒤에 붙여준다는 뜻입니다.
즉!!! http://localhost:8080/Home_Test/ 이렇게 주소창에 실행을 시키면
1. web.xml 실행 후 servelt-context 가 요청 낚아챔
2. servlet-context에서 어노태이션의 사용 여부 및 위치를 확인 후 값 전달
* /Home_Test/ 라서 "/"요놈만 넘어가는 중입니다,
ex) Home_Test/home.jsp 라면 home.jsp 가 넘어갑니다.
3. Homecontroller의 @Controller가 확인되며, mapping 값인 "/"인 home 메소드가 실행
* return 값 "home"은 다시 servlet-context.xml 로 넘어갑니다.
4. servlet-context.xml 이 return 값 'home'에 preffix와 suffix를 붙여 줌
* preffix(/WEB-INF/views) + home + suffix(.jsp) = /WEB-INF/views/home.jsp
5. home.jsp 가 실행됨
* 실제론 (http://localhost:8080/Home_Test/WEB-INF/views/home.jsp) 가 실행 됩니다.