유블로그

[Spring] Spring Web Application 동작원리 & spring 흐름 본문

Spring

[Spring] Spring Web Application 동작원리 & spring 흐름

yujeong kang 2020. 10. 21. 13:35

Spring Web Application 동작원리

 

 

 

- Tomcat 이 src>webapp>WEB-INF>web.xml 읽는다.

  1-1) listener 실행

  • 맨 처음 listener 를 실행한다. (사용자의 요청에 의해 실행되는 것이 아니라 자동으로 호출됨) -> listener 가 관리하는 하나의 container 가 만들어진다. 그 container 를 Root 라고 한다. 보통 Root에 프로젝트에서 공용으로 쓰는 것들을 넣는다.(DB 같은 정보들)
  • listener 클래스에 있는 init 같은 거 쭉 수행한다.
  • context-param 에 있는 xml 파일 (/WEB-INF/spring/root-context.xml)읽는다. 설정 내용이 있다면 그것을 적용한다.

 

- Dispatcher Servlet 를 메모리에 올린다.

  • Root 에 있는 것들을 사용할 수 있다.
  • <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 에 있는 클래스 읽는다. ( 해당되는 xml 을 읽음. 아래에서는 servlet-context.xml )

<servlet> 
<servlet-name>appServlet</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>

</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet>

-> load-on-startup 으로 순서 높여준다~!

 

<servlet-mapping> 
<servlet-name>appServlet</servlet-name> 
<url-pattern>*.do</url-pattern> 
</servlet-mapping>

.do 로 끝나는 모든 파일에 연결한다...? -> 아직 잘 모르겠음 ㅜ

appServlet 이 가진 servlet-class 를 .do 로 매핑..?

 

 

 

- servlet-context.xml

<resources mapping="/resources/**" location="/resources/" />

-> /resources/ 여기 있는 것들을 /resources/** 여기로 mapping

 

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<beans:property name="prefix" value="/WEB-INF/views/" /> 
<beans:property name="suffix" value=".jsp" /> 
</beans:bean>

-> controller 가 준 페이지 앞에 /WEB-INF/views/ 를 붙이고, 마지막에 .jsp를 붙여라!

ex) "home" 이 리턴된 경우, /WEB-INF/views/home.jsp 로 이동

 

<context:component-scan base-package="com.ssafy.lecture" />

-> 해당 패키지 아래 있는 파일 중 @Component, @Controller, @Service, @Repository 붙은 것들을 자동 bean 등록~!

 

 

 

 

 

 

+ 전체 흐름 간단히

 

a.do 라는 사용자의 요청이 Dispatcher Servlet 에게 가면, Handler Mapping한테 어디로 가야하는 지 물어보면 가야하는 컨트롤러 알려줌.

그 컨트롤러에서 서비스와 DAO 거쳐서 ModelAndView를 리턴해주면 Dispathcer Servlet 은 그걸 받아서 View Resolver에게 가고 거기서 prefix , suffix 이런 거 받아서 어디로 갈지 정해지면 view 로 결과 받아서 사용자에게 return!