티스토리 뷰

study/Spring

chap 09 - 스프링 MVC 설정

xoxowo 2023. 1. 30. 15:47

초보 웹 개발자를 위한 스프링 5 프로그램 입문을 보고 복습 겸 개인 학습 정리입니다. (windows 기준)

 

..흑흑..

 

스프링 MVC

스프링 프레임워크가 제공하는 기능 중 MVC 기능은 웹 요청을 처리하기 위해 다양한 구성 요소를 연동한다.

이번 챕터의 목표는 최소한의 스프링 MVC 설정과 컨트롤러 구현, 이 컨트롤러 처리 결과를 보여줄 뷰 코트를 구현하면서 어떻게 동작하는지 알아보는 것이다 😮

 

스프링 MVC 동작 방식은 다음 챕터에서 자세히(?) 알아보자.

 

예제 프로젝트 만들기 (메이븐 기준)  예제 코드

sp5-chap09 프로젝트 폴더 생성

프로젝트(sp5-chap09) 하위 폴더로 아래 폴더 생성

- src/main/java

- src/main/java/webapp

- src/main/java/webapp/WEB-INF

- src/main/java/webapp/WEB-INF/view

sp5-chap09 폴더 내부에 pom.xml 생성

+ pom.xml 파일에 <packaging>war 값 추가, 서블릿 3.1, JSP 2.3, JSTL 1.2 dependency 추가

war : web application archive 를 의미

이클립스에서 sp5-chap09 폴더에 생성한 메이븐 프로젝트 import

톰캣😺 설치

 

 

스프링 MVC를 위한 설정 추가 (최소 설정)

- MVC 주요 설정 (HandlerMapping, ViewResolver 등)

- 스프링 DispatcherServlet 설정

 

 

config 패키지에 MvcConfig파일에 MVC를 위한 설정을 추가하자

해당 클래스는 WebMvcConfigurer 인터페이스 구현하는데 이 인터페이스(WebMvcConfigurer)는 스프링의 MVC 개별 설정을 조정할 때 사용한다.

 

@EnablewebMvc 애너테이션은 스프링 MVC을 사용하는데 필요한 기본적인 구성을 설정해준다. 

 

 

→ chap09/src/main/java/config/MvcConfig.java

package config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc // 스프링 MVC 설정 활성화하는 애노테이션 다양한 설정을 생성한다.
public class MvcConfig implements WebMvcConfigurer {

    @Override // 매핑 경로를'/'를 주었을 때 JSP/HTML/CSS 등을 빠르게 처리하기 위한 설정 추가
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override //jsp를 이용해서 컨트롤러의 실행 결과를 보여주기 위한 설정 추가
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/view/.", ".jsp");
    }
}

 

web.xml 파일에 DispatcherServlet 설정하기

src/main/java/webapp/WEB-INF 폴더에 web.xml 파일을 작성한다. 코드가 길어 접은 글로 대체

 

DispatcherServlet은 초기화 과정에서 contextConfiguration 초기화 파라미터에 지정한 설정 파일을 이용해 스프링 컨테이너를 초기화한다. 

 

src/main/java/webapp/WEB-INF/web.xml

더보기

 

<?xml version="1.0" encoding="UTF-8"?>

 

    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    version="3.1">

 

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>
                org.springframework.web.context.support.AnnotationConfigWebApplicationContext
            </param-value>
        </init-param>
        <init-param>
            <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>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

 

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

</web-app>

 

 

 

코드 구현

 

컨트롤러 구현

클라이언트의 요청을 알맞게 처리할 컨트롤러를 작성하자

 

→ chap09/src/main/java/chap09/HelloController.java

package chap09;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller // 선언한 class를 스프링 MVC 컨트롤러로 사용하겠다는 뜻
public class HelloController {
    
    @GetMapping("/hello")      
    public String hello(Model model,
        // @RequestParam는 http 요청 파라미터 값을 메서드 파라미터로 전달할 때 사용
        @RequestParam(value = "name", required = false) String name) {
            model.addAttribute("greeting", "안녕," + name);
            return "hello";
        }
}

- @Controller 애노테이션을 적용한 클래스는 스프링 MVC에서 컨트롤러로 사용한다.

- @GetMapping 애노테이션을은 메서드가 처리할 요청 경로를 지정 

    → 위 파일에서는 /hello 경로로 들어온 요청을 hello()메서드를 이용해서 처리하는 것으로 설정

    → HTTP 요청 메서드 중 GET 요청에 대한 매핑 설정

- Model model 파라미터는 컨트롤러 처리 결과를 뷰에 전달

- @RequestParam 애노테이션은 HTTP 요청 파라미터의 값을 메서드 파라미터로 전달

- model.addAttribute() 메서드의 첫 번째 파라미터는 데이터를 식별하는 속성 이름 ("greeting")

 

 

컨트롤러를 스프링 빈으로 등록

→ chap09/src/main/java/config/ControllerConfig.java

package config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import chap09.HelloController;

@Configuration
public class ControllerConfig {
    
    @Bean
    public HelloController helloController() {
        return new HelloController();
    }
}

 

JSP 구현

앞서 컨트롤러가 생성한 결과를 보여주는 view 코드 작성 

view 코드는 JSP를  이용해서 구현한다.

 

→ chap09/src/main/webapp/WEB-INF/view/hello.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<!DOCTYPE html>
<html>
  <head>
    <title>Hello</title>
  </head>
  <body>
    인사말: ${greeting}
  </body>
</html>

 

서버 실행

 

이제 서버를 실행해보자. (미리 톰캣😺 서버 설치 및 설정 완료)

[Run As] → [Run on Server] → [톰캣😺 서버 실행] 

 

 

다음과 같이 위에서 지정한 경로로 접속했을 때 아래와 같이 출력되면 문제가 없는 것

 

실행 결과를 보면 hello.jsp에 생성한 결과가 웹 브라우저에 출력된 것을 알 수 있고, name 파라미터로 지정한 값이 HelloController를 거쳐 JSP까지 전달된 것을 알 수있다.

 

'study > Spring' 카테고리의 다른 글

chap 11 - MVC 1 (1)  (0) 2023.02.06
chap 10 - 스프링 MVC 프레임워크 동작 방식  (0) 2023.01.30
Tomcat 설치  (0) 2023.01.25
chap 08 - 트랜잭션 처리 (Transaction)  (0) 2023.01.25
chap 08 - DB 연동 jdbcTemplate 쿼리 실행  (0) 2023.01.18
댓글