처음부터 차근차근

Eclipse Spring MVC 프로젝트 실행할 때 404 error(Spring 동작 원리) 본문

Error&Warning

Eclipse Spring MVC 프로젝트 실행할 때 404 error(Spring 동작 원리)

_soyoung 2021. 9. 14. 15:12
반응형

home.jsp에서 프로젝트를 실행하려고 했더니

 

404 error가 생겼다.

의외로 해결은 간단했다.

 

프로젝트에서 서버를 구동하면 된다.

 

그러면 위와 같이 home.jsp가 잘뜬다.

 

 

home.jsp에서 서버 실행을 하거나 검색창에 home.jsp를 쳐서 home.jsp를 실행하는 것이 안되는 이유는 Spring FrameWork의 동작원리 때문이다.

 

Spring FrameWork의 동작원리

 

클라이언트 요청 (요청한 인터넷 주소 : /first)

        ↓

1. web.xml 실행

서버를 실행하면 가장 먼저 web.xml이 실행된다.

web.xml의 내용 중 위의 코드에 의해 DispatcherServlet이 요청을 가로채고 servlet-context.xml을 실행한다.

 

2. servlet-context.xml실행(HandlerMapping, Bean 생성)

servlet-context.xml의 <context:component-scan base-package="com.mypac.first"/>에서는 base-package에 적혀있는 위치를 읽어와서 그 곳 클래스에 어노테이션이 있으면 그 클래스를 bean으로 등록한다.

그래서 com.mypac.first 위치의 HomeController.java의 HomeController 클래스 @Controller 어노테이션을 읽어들여서 HomeController클래스를 bean으로 등록했다.

 

그리고 <annotation-driven/>은 HandlerMapping 역할을 하여 component-scan을 통해서 스캔된 bean 중에서 해당 요청과 알맞은 Controller를 찾아 연결시켜준다.

그래서 component-scan은 @RequestMapping(value = "/", method = RequestMethod.GET)을 찾아서 HomeController클래스를 연결했고, HomeController클래스에서 home()메소드를 실행했다. 

 

3. HomeController클래스의 home()메소드 실행

serverTime이라는 데이터를 model에 담고 리턴값으로 home을 가지고 다시 servlet-context.xml으로 간다.

 

4. 다시 servlet-context.xml으로 돌아옴

servlet-context.xml 돌아오면 위의 코드에 의해 리턴값 home을 조합하여 /WEB_INF/views/home.jsp이라는 경로를 만들고, InternalResourceViewResolver를 통해 이에 맞는 view를 찾는다.

 

5. 다시 web.xml의 DispatcherServlet으로 돌아옴

최종 결과인 home.jsp가 출력된다.

+ 여기서 잘보면 주소창에 /WEB_INF/views/home.jsp라고 뜨지 않고 다르게 뜬다.

그 이유가 바로 스프링 프레임워크의 동작 원리에 때문에 그렇다.

그래서 보안면에서도 신경을 쓸 수 있다.

 

 

참고

https://hello-walnuty.tistory.com/16 

반응형

'Error&Warning' 카테고리의 다른 글

[warning] git - LF will be replaced by CRLF  (0) 2021.09.24
@Configuration 오류  (0) 2021.09.23
@PostConstruct, @PreDestroy 에러  (0) 2021.09.16
web.xml 에러  (0) 2021.09.14
log4j에러  (0) 2021.09.14
Comments