저번에 이어 MVC 패턴에 대해 조금 더 자세히 공부한다.

- Spring 서버를 열고 Request 요청을 하게되면 맨 앞에서 어떤 작업을 할지 처리해 주는 역할을 하는게 Dispatcher Servlet 의 역할이다.
Dispatcher Servlet 은 별다른 처리를 하지 않는다.
(처리는Controller가 함.)
web.xml
...
...
<!-- Processes application requests -->
<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>
...
...
Dispatcher Servlet에서 요청을 받았다.
그렇다면 처리를 위해서Controller를 찾아야 하는데,
이 때 사용되는데Handler Mapping이다.
Handler Mapping이Controller를 찾는 방법은 아래와 같다.
1.@Controller라는 Annotation
2.com.spring.hwang경로에 Controller.java 파일이 있어야 함. (testController.java)
servlet.context.xml 파일에 명시되어 있음

Mapping 된
Handler덕분에Controller를 찾았다.
이 때Controller와Dispatcher Servlet이 서로 매칭해서 사용할 수 있게 하는 역할
Dispatcher Servlet에서 Controller를 바로 실행할 수 없다.
=> 이를 해결하기 위해 Handelr Adapter가 규격을 맞춘다.
@RequestMapping("/test.do")
public String test() {
return "test";
}
위와 같은 코드를 통해
test.jsp로 연결되게 된다. 이때return test로 했음에도test.jsp로 이동해주는 역할을 한다.
해당 내용은servlet-context.xml에 저장되어 있다.
그리고 위 코드는 이렇게도 작성해도 View Resolver 덕분에 똑같이 동작한다.
@RequestMapping("/test.do")
public void test() {
}
/WEB-INF/spring/test.jsp와 같이 경로를 추가해 주는데 이런 역할을 해 주는게
ViewResolver객체임.
Conrtroller에서 view name or Model을 return 한다.
view name인 test를 return 한다고 했을 때
/WEB-INF/spring/로 경로를 추기해 주는데 이런 역할을 해 주는게
ViewResolver객체이다. (servlet-context.xml에 있음)<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <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는Spring에 있는Container에 저장하는데 이를Model이라고 한다.
Model에 저장할 때Model을 직접 생성하지 않는다.
(ex)model = new Model()=> (X)
Spring 에서는@Inject,@AutowiredAnnocation으로 명시해 줌으로서
별도의 객체 생성을 하지 않았다.
=> 이미 생성된 객체를주입받아 사용한다.DI(Dependency Injection) 이라 한다.
이후 Dispatcher Servlet이 최종 jsp를 동적으로 만들어 내면서 Model에 있는 값을 빼오며 Response 하게 된다.
Model이나View Resolver에서 데이터를 전달하면View가 클라이언트에게 응답한다.
URL RequestDispatcher Servlet에서 해당 요청을Controller로 전달- 처리를 위해
Handler Mapping을 통해Controller가 어디 존재하는지 파악Handler Mapping을 통해Controller를 찾은 후Handler Adapter로 규격을 맞춤- 규격을 맞춘 객체를
View Resolver에 전달하거나Model에 전달함.Model에서는 객체를 별도로 생성하지 않고 이미 생성된 객체를주입받아 사용
=>Dependency Injection(DI)View에 전달 후 사용자에게 보여짐
