WebApplication

Spring Framework_MVC

coolcode 2022. 12. 27. 00:37

스프링 프레임워크는 웹 애플리케이션 개발에 필요한 여러 기능을 미리 만들어 제공함

그 기능중 하나가 '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 설정파일 관련 참고

https://node-js.tistory.com/entry/Spring-webxml-root-contextxml-servlet-contextxml-%EC%97%AD%ED%95%A0Servlet-DispatcherServlet%EC%9D%B4%EB%9E%80

 

[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 폴더는 톰캣에서 읽어들이는 항목으로 반드시 존재해야 함