Spring Framework_MVC
스프링 프레임워크는 웹 애플리케이션 개발에 필요한 여러 기능을 미리 만들어 제공함
그 기능중 하나가 'MVC'
MVC의 특징
모델2 아키텍처를 지원 , 스프링과 다른 모듈의 연계가 쉬움, 타일즈같은 View기술(화면관련 프레임워크)와 연계가 쉬움
스프링프레임워크 MVC 구성요소
DispatcherServlet : 클라이언트 요청을 받고 해당 요청에 대한 컨트롤러를 선택하여 요청을 전달함. 또한 컨트롤러의 응답값을 View에 전달
+ Dispatcher(= 보내는자)Servlet (= Servlet을 보내는자) HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 Front Controller
+ Front Controller 는 주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러
HandlerMapping : 클라이언트가 요청한 URL을 처리할 컨트롤러를 지정
Controller : 클라이언트의 요청을 처리한 후 그 결과를 DispatcherServlet에 전달
ModelAndView : 컨트롤러의 처리 결과를 전달할 뷰를 지정
View : 컨트롤러의 처리 결과 화면을 생성
웹브라우저 -> DispatcherServlet -> HandlerMapping -> Controller -> ModelAndView -> ViewResolver -> View -> DispatcherServlet -> 웹브라우저
1) 브라우저가 DispatcherServlet 에 URL로 접근하여 해당 정보 요청
2) HandlerMapping 에서 요청에 대해 매핑된 컨트롤러가 있는지 확인 후 매핑된 컨트롤러에 처리를 요청
3) 컨트롤러가 요청을 처리한 결과와 View이름을 ModelAndView 에 저장 후 DispatcherServlet 으로 반환
4) DispatcherServlet 에서는 컨트롤러에서 보내온 View이름을 ViewResolver로 보내 해당 View를 요청
5) ViewResolver 는 요청한 View 를 보내고 View의 처리 결과를 DispatcherServlet으로 보냄
6) DispatcherServlet 은 최종 결과를 브라우저로 전송
** Servlet : 자바로 구현 된 CGI 즉 자바를 사용하여 웹을 만들기 위해 필요한 기술. 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램을 Servlet 이라고 함
** Common Gateway Interface(CGI) : 서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=todoskr&logNo=220845006916
[스프링 프레임워크] 좐의 좐니쉬운 스프링 04_Dispatcher Servlet, Handler Mapping
안녕하세요. 좐입니다. 지난주에 이어 좐의 좐니쉬운 스프링 포스팅을 시작하겠습니다. 지난주에는 스...
blog.naver.com
> servlet .xml 설정파일 web.xml 설정파일 관련 참고
[Spring] 스프링 설정 - web.xml, root-context.xml, servlet-context.xml 역할(Servlet, DispatcherServlet이란)
스프링을 세팅하는 도중 궁금한 내용들이 생겨 따로 정리한다. 예제를 그대로 따라하기만 하면 되겠지만 왜 쓰는건지는 알고 넘어가자. 간단하게 정리하려고 했는데 생각보다 관련해서 알아야
node-js.tistory.com
> 스프링 설정 파일 관련 참고
// DispatcherServlet의 기본 설정 파일
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven /> // 자바의 어노테이션 문법을 해석하게 하는 설정
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
// view를 매핑해주는 설정(절대경로를 짧게 만들기 위함)
<!-- 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>
<context:component-scan base-package="com.pro.yoon.*" />
</beans:beans>
// 요청에 대한 모든 처리를 DispatcherServlet이 한다는 설정
// root-context.xml 참조 (화면단의 servlet설정이 아닌 모든 컨테이너가 공유하는 자원에 대한 설정파일 ex) mapper, service)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 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>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
WEB-INF/
: 웹 어플리케이션을 실행하는데 필요한 클래스 파일 및 설정 파일 등이 저장되는 폴더
WEB-INF/lib
: 웹 어플리케이션에서 사용하는 jar 파일 폴더
WEB-INF/classes
: 웹 어플리케이션에서 사용하는 클래스 파일이 위치.
상업적 목적이라면 com/회사명/분류/클래스에 그냥 일반 클래스 파일이라면 org/패키지네임/클래스 에 위치시킴
WEB-INF/src
: 일반 소스파일
WEB-INF/web.xml
: 웹 어플리케이션에 대한 전반적인 설정 파일
* WEB-INF 폴더에 설정파일, 폴더 등이 존재하지 않더라도
WEB-INF 폴더는 톰캣에서 읽어들이는 항목으로 반드시 존재해야 함