ch09. 스프링 MVC 시작하기

728x90
참고 도서 : 스프링5 프로그래밍 입문 - 최범균 저

ch09. 스프링 MVC 시작하기 

-스프링이 지원하는 웹 MVC 프레임워크

[MVC 패턴]
-대화형 애플리케이션을 <모델//컨트롤러> 3개의 서브 시스템으로 구조화한 패턴
-Model-View-Controller 패턴
[Spring MVC]
사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.
소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 둔다.
간단하게 Model, View, Controller로 분리하여 개발하는 디자인 패턴이다.

▷Model
데이터와 비즈니스 로직을 관리한다.
애플리케이션이 포함해야할 데이터가 무엇인지를 정의한다.
일반적으로 POJO로 구성된다.

▷View
레이아웃과 화면을 처리한다.
애플리케이션의 데이터를 보여주는 방식을 정의한다.
JSP
JSP 이외에도 Thymeleaf, Groovy 등 여러 Template Engine이 있다.

▷Controller

VIew와 Model 사이의 인터페이스 역할을 한다.
애플리케이션 사용자의 입력에 대한 응답으로 Model 및 View를 업데이트하는 로직을 포함한다.
Model/View에 대한 사용자 입력 및 요청을 수신하여 그에 따라 적절한 결과를 Model에 담아 View에 전달한다.
즉, Model Object와 이 Model을 화면에 출력할 View Name을 반환한다.

[프로젝트 생성]

1) 메이븐 설정 : [pom.xml 파일]

-<packaing> 값으로 war 주기

-스프링 이용 웹 어플리케이션 개발에 필요한 의존 설정

             -서블릿 3.1/ JSP 2.3, JSTL 1.2 에 대한 의존을 추가

             -spring-webmvc 모듈에 대한 의존 추가

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.2-b02</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>

2) 그레이들 설정 : [build.gradle 파일]

-‘war’ 플러그인 추가 : apply plugin: ‘war’

-스프링 이용 웹 어플리케이션 개발에 필요한 의존 설정

               -서블릿 3.1/ JSP 2.3, JSTL 1.2 에 대한 의존을 추가

               -spring-webmvc 모듈에 대한 의존 추가

dependencies {
providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
providedRuntime 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.2-b02'
compile 'javax.servlet:jstl:1.2'
compile 'org.springframework:spring-webmvc:5.0.2.RELEASE'
}

 

[이클립스 톰캣 설정]

-이클립스에서 웹 프로젝트 테스팅하기 위해서는 웹 서버 설정 필요

-톰캣을 이용하여 톰캣 8.5 를 이클립스 서버로 등록

[window]->[Preferences] 메뉴 실행
[Server/Runtime Environments 선택]
[Add] -> 톰캣 서버를 등록

 

[스프링 MVC 설정]

-스프링 MVC 실행에 필요한 최소 설정

      ➀ 스프링 MVC 주요 설정 (HandlerMapping, ViewResolever )
      ➁ 스프링의 DispatcherServlet 설정

   ▷ 스프링 MVC 주요 설정

@Configuration
@EnableWebMvc //스프링 MCV 사용에 필요한 기본적 구성 설정 
public class MvcConfig implements WebMvcConfigurer {
	@Override //디폴트 서블릿 설정 
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}
	@Override //ViewResolever 설정 
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/WEB-INF/view/", ".jsp");
	}
}

      ◈ @EnableWebMvc 애노테이션

-스프링 MVC 사용에 필요한 기본적인 구성을 설정

      WebMcvConfigurer 인터페이스

-스프링 MVC 개별 설정 조정에 필요한 메소드를 내부에 정의해놓았다.
-내부의 configureDefaultServletHandling() 메소드 : 디폴트 서블릿 설정
-내부의 configureViewResolvers() 메소드 : ViewResolver 설정

                                 -> 위 설정 = 스프링 MVC 이용 웹 어플리케이션 개발에 필요한 최소 설정


 ▷ ➁ 스프링의 DispatcherServlet 설정

-스프링 MVC가 웹 요청을 처리하려면 DispatcherServlet 을 통해 웹 요청을 받아야 한다.

-이를 위해, web.xml 파일에 DispatcherServlet을 등록한다.

 [web.xml] 파일

<servlet>
<servlet-name>dispatcher</servlet-name> // 이름을 dispatcher로 등록 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param> //contextClass 초기화 파라미터 생성 
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param> //contextConfiguration 초기화 파라미터 값을 지정 
<param-name>contextConfigLocation</param-name>
<param-value> //값에 스프링 설정 클래스의 목록을 지정 
	config.MvcConfig 
	config.ControllerConfig 
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping> //서블릿 매핑 설정 
<servlet-name>dispatcher</servlet-name> 
		       //모든 설정을 DispatcherServlet이 처리하도록 서블릿 매핑을 설정 
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter> //서블릿 필터 등록(HTTP 요청 파라미터 인코딩 처리를 위함)
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
 <param-name>encoding</param-name> //HTTP 요청 읽어올 애 사용할 인코딩 지정 
 <param-value>UTF-8</param-value>
 </init-param>
</filter>
<filter-mapping>
 <filter-name>encodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>
 </web-app>
<param-name>contextConfigLocation</param-name>
<param-value> //값에 스프링 설정 클래스의 목록을 지정 
       config.MvcConfig 
       config.ControllerConfig 
</param-value>


        -DispatcherServlet은 초기화 과정에서
       contextConfiguration 초기화 파라미터가 지정한 스프링 설정 파일을 이용해서 스프링 컨테이너를 초기화한다.
      -, 여기서의 설정에서는 MvcConfig클래스와 ControllerConfig 클래스를 이용해서 스프링 컨테이너를 생성한다
필요한 설정은 여기서 끝났다. 

 

[코드 구현]

-클라이언트 요청 처리할 컨트롤러 구현
-처리 결과를 보여줄 JSP 구현

       ➀ 컨트롤러 구현

스프링 컨트롤러 : 웹 요청 처리하고 그 결과를 뷰에 전달하는 스프링 빈 객체

      - 반드시 스프링 컨트롤러로 사용될 클래스에 @Controller 붙여야 함
      - @GetMapping, @PostMapping (요청 매핑 애노테이션) 이용 -> 처리할 경로 지정

<컨트롤러 구현>

@Controller // 스프링 MVC 컨트롤러로 해당 클래스를 등록 
public class HelloController {
	@GetMapping("/hello") //메소드가 처리할 요청 경로 지정 
	public String hello(Model model,  //컨트롤러 처리 결과를 뷰에 전달 시 사용 
			@RequestParam(value = "name", required = false) String name) {
				//HTTP 요청 파라미터 값 -> 메소드 파라미터로 전달
		model.addAttribute("greeting", "안녕하세요, " + name);
			//뷰에 전달할 데이터 지정 목록 
		return "hello"; 
			//이 컨트롤러의 처리결과를 보여줄 뷰 이름 지정하여 리턴 
	}
}​

<구현한 컨트롤러를 스프링 빈으로 등록>

@Configuration
public class ControllerConfig {
	@Bean //구현한 컨트롤러를 스프링 빈으로 등록 
	public HelloController helloController() {
		return new HelloController();
	}
}

 

       JSP 구현

컨트롤러가 생성한 결과를 보여줄 뷰 코드는 JSP를 이용해서 구현한다.

             - 앞서 구현한 컨트롤러의 리턴한 뷰 이름은 “hello”였다.

             - JSP 파일 이름은 “hello.jsp”이다.

[hello.jsp]

 
<!DOCTYPE html>
<html>
  <head>
    <title>Hello</title>
  </head>
  <body>
    인사말: ${greeting}
  </body>
</html>

뷰 이름과 JSP 파일의 연결은 MvcConfig 클래스의 다음 설정을 토대로 이뤄진다.

	@Override //ViewResolever 설정 
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/WEB-INF/view/", ".jsp");
			//JSP를 뷰 구현으로 사용할 수 있게 설정 
	}

-JSP 로 뷰 코드를 구현할 경우,

컨트롤러에서 추가한 속성 이름을 이용하여 속성값을 응답 결과에 출력하게 된다.

 

앞으로도 다음의 [전체 구조] 는 크게 벗어나지 않는다.

- 스프링 MVC 설정

- 컨트롤러 구현

- 뷰 코드 구현

 

 

728x90