Spring

스프링 MVC 예제

기록만이살길 2022. 12. 8. 10:05
반응형

1. 개요

이것은 Java 기반 구성과 XML 구성을 사용하여 Spring MVC 프로젝트를 설정하는 방법을 보여주는 간단한 Spring MVC 사용방법(예제) 입니다.

Spring MVC 프로젝트에 대한 Maven 의존성은 Spring MVC 의존성 문서 에 자세히 설명되어 있습니다.

2. 스프링 MVC란?

이름에서 알 수 있듯이 Model-View-Controller 또는 MVC 패턴을 다루는 Spring 프레임워크의 모듈입니다. MVC 패턴의 모든 장점과 Spring의 편리함을 결합합니다.

Spring 은 DispatcherServlet 을 사용하여 전면 컨트롤러 패턴 으로 MVC를 구현 합니다.

간단히 말해서 DispatcherServlet 은 요청을 의도한 목적지로 라우팅하는 주 컨트롤러 역할을 합니다. 모델은 애플리케이션의 데이터일 뿐이며 뷰는 다양한 템플릿 엔진 으로 표현됩니다 .

잠시 후 예제에서 JSP를 살펴보겠습니다.

3. Java 구성을 사용하는 Spring MVC

Java 구성 클래스를 통해 Spring MVC 지원을 활성화하려면 @EnableWebMvc 어노테이션 을 추가하기 만 하면 됩니다 .

@EnableWebMvc
@Configuration
public class WebConfig {

    /// ...
}

이렇게 하면 컨트롤러 및 매핑 등록, 형식 변환기, 유효성 검사 지원, 메시지 변환기 및 예외 처리와 같은 MVC 프로젝트에 필요한 기본 지원이 설정됩니다.

이 구성을 사용자 지정하려면 WebMvcConfigurer 인터페이스 를 구현해야 합니다 .

@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {

   @Override
   public void addViewControllers(ViewControllerRegistry registry) {
      registry.addViewController("/").setViewName("index");
   }

   @Bean
   public ViewResolver viewResolver() {
      InternalResourceViewResolver bean = new InternalResourceViewResolver();

      bean.setViewClass(JstlView.class);
      bean.setPrefix("/WEB-INF/view/");
      bean.setSuffix(".jsp");

      return bean;
   }
}

이 예제에서는 /WEB-INF/view 디렉토리 에서 .jsp 뷰를 반환할 ViewResolver 빈을 등록했습니다.

여기서 매우 중요한 것은 ViewControllerRegistry  를 사용하여 URL과 뷰 이름 사이에 직접 매핑을 생성하는 뷰 컨트롤러를 등록할 수 있다는 것 입니다. 이렇게 하면 둘 사이에 컨트롤러가 필요하지 않습니다.

컨트롤러 클래스도 정의하고 스캔 하려면 컨트롤러가 포함된 패키지에 @ComponentScan 어노테이션을 추가할 수 있습니다.

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = { "com.baeldung.web.controller" })
public class WebConfig implements WebMvcConfigurer {
    // ...
}

이 구성을 로드하는 애플리케이션을 부트스트랩하려면 초기화 클래스도 필요합니다.

public class MainWebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(final ServletContext sc) throws ServletException {

        AnnotationConfigWebApplicationContext root = 
          new AnnotationConfigWebApplicationContext();
        
        root.scan("com.baeldung");
        sc.addListener(new ContextLoaderListener(root));

        ServletRegistration.Dynamic appServlet = 
          sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext()));
        appServlet.setLoadOnStartup(1);
        appServlet.addMapping("/");
    }
}

Spring 5 이전 버전 의 경우 인터페이스 대신 WebMvcConfigurerAdapter 클래스를 사용해야 합니다.

4. XML 구성을 사용하는 Spring MVC

위의 Java 구성 대신 순수한 XML 구성을 사용할 수도 있습니다.

<context:component-scan base-package="com.baeldung.web.controller" />
<mvc:annotation-driven />    

<bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <mvc:view-controller path="/" view-name="index" />

</beans>

순수한 XML 구성을 사용하려면 애플리케이션을 부트스트랩하기 위해 web.xml 파일도 추가해야 합니다. 이 접근 방식에 대한 자세한 내용은 이전 기사 를 확인하십시오 .

5. 컨트롤러와 뷰

기본 컨트롤러의 예를 살펴보겠습니다.

@Controller
public class SampleController {
    @GetMapping("/sample")
    public String showForm() {
        return "sample";
    }

}

해당 JSP 리소스는 sample.jsp 파일입니다.

<html>
   <head></head>

   <body>
      <h1>This is the body of the sample view</h1>	
   </body>
</html>

JSP 기반 뷰 파일은 프로젝트의 / WEB-INF 폴더 아래에 위치하므로 직접적인 URL 액세스가 아닌 Spring 인프라에서만 액세스할 수 있습니다.

6. 부트가 있는 스프링 MVC

Spring Boot는 Spring 플랫폼에 추가되어 독립 실행형 프로덕션 등급 애플리케이션을 시작하고 생성하기가 매우 쉽습니다. Boot 는 Spring을 대체하기 위한 것이 아니라 더 빠르고 쉽게 작업할 수 있도록 하기 위한 것입니다.

6.1. 스프링 부트 스타터

새 프레임워크는 특정 기능에 필요한 모든 기술을 가져올 수 있는 의존성 설명자인 편리한 스타터 의존성을 제공합니다 .

이들은 더 이상 각 의존성에 대한 버전을 지정할 필요가 없고 대신 스타터가 의존성을 관리할 수 있다는 이점이 있습니다.

시작하는 가장 빠른 방법은 spring-boot-starter-parent pom.xml 을 추가하는 것입니다 .

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.2</version>
</parent>

이것은 의존성 관리를 처리합니다.

6.2. 스프링 부트 진입점

Spring Boot 를 사용하여 빌드된 각 애플리케이션 은 기본 진입점을 정의하기만 하면 됩니다.

이것은 일반적으로 @SpringBootApplication 어노테이션이 달린 기본 메서드 가 있는 Java 클래스입니다 .

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

이 어노테이션은 다음과 같은 다른 어노테이션을 추가합니다.

  • @Configuration 은 클래스를 빈 정의의 소스로 표시합니다.
  • @EnableAutoConfiguration 은 프레임워크에 클래스 경로의 의존성을 기반으로 빈을 자동으로 추가하도록 지시합니다.
  • @ComponentScan 은 애플리케이션 클래스 이하 와 동일한 패키지에서 다른 구성 및 빈을 스캔합니다 .

Spring Boot를 사용하면 섹션 3에 정의된 ViewResolver를 사용하지 않고 Thymeleaf 또는 JSP를 사용하여 프런트 엔드를 설정할 수 있습니다. pom.xml에 spring-boot-starter-thymeleaf 의존성을 추가하면 Thymeleaf가 활성화되고 추가 구성이 필요하지 않습니다.

Boot 앱의 소스 코드는 언제나처럼 GitHub 에서 사용할 수 있습니다 .

마지막으로 Spring Boot를 시작하려는 경우 여기에서 참조 소개를 살펴보십시오 .

7. 결론

이 기사에서는 Java 구성을 사용하여 간단하고 기능적인 Spring MVC 프로젝트를 구성했습니다.

이 Spring MVC 사용방법(예제)의 구현은 GitHub 프로젝트 에서 찾을 수 있습니다 .

프로젝트가 로컬에서 실행되면 http://localhost:8080/spring-mvc-basics/sample 에서 sample.jsp  에 액세스할 수 있습니다 .

Generic footer banner
참고
  • https://docs.spring.io/spring-framework/docs/current/reference/html
  • https://www.baeldung.com/spring-mvc-tutorial
반응형