ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 간단한 웹 MVC 프로젝트
    Spring 2019. 5. 12. 23:07

    메이븐과 JSP를 사용하여 간단한 스프링 웹 MVC 프로젝트를 작성한다.

    maven 프로젝트를 생성

    • 프로젝트 구조
     ~/webmvc$ tree
    .
    ├── pom.xml
    ├── src
    │   ├── main
    │   │   ├── java
    │   │   │   ├── RootConfig.java
    │   │   │   ├── WebConfig.java
    │   │   │   ├── WebInitializer.java
    │   │   │   └── controller
    │   │   │       └── HomeController.java
    │   │   ├── resources
    │   │   └── webapp
    │   │       └── WEB-INF
    │   │           └── views
    │   │               └── home.jsp
    │   └── test
    │       └── java
    │           └── HomeControllerTest.java

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.tistroy.hilucky</groupId>
        <artifactId>web-mvc</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.19.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>4.3.14.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </project>

    DispatcherServlet 설정

    • AbstractAnnotationConfigDispatcherServletInitializer를 상속

    WebInitializer.java

    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    
    public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
      @Override
      protected Class<?>[] getRootConfigClasses() {
        return new Class[] { RootConfig.class };
      }
    
      @Override
      protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebConfig.class };
      }
    
      @Override
      protected String[] getServletMappings() {
        return new String[] { "/" };
      }
    }
    • WebInitializer#getRootConfigClasses : ContextLoaderListener가 생성한 애플리케이션 컨텍스트를 설정하는 빈으로 데이터 계층이나 백엔드를 구동하는데 사용되는 빈들에 대한 정의
    • WebInitializer#getServletConfigClasses : DispatcherServlet의 애플리케이션 컨텍스트에서 사용되는 빈들에 대한 정의
    • WebInitializer#getServletMappings의 "/" 매핑은 애플리케이션으로 오는 모든 요청을 처리

    WebConfig.java

    @Configuration
    @EnableWebMvc
    @ComponentScan("controller")
    public class WebConfig extends WebMvcConfigurerAdapter {
      @Bean
      public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
      }
    
      @Override
      public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
      }
    }
    • @EnableWebMvc
    • @ComponentScan : controller 디렉토리 아래에 컴포넌트들이 스캔될 수 있도록 설정
    • WebConfig#viewResolver : /WEB-INF/views/home.jsp 란 파일을 찾을 수 있도록 뷰 리졸버를 등록

    컨트롤러 설정

    HomeController.java

    @Controller
    @RequestMapping("/")
    public class HomeController {
    
      @RequestMapping(method = RequestMethod.GET)
      public String home() {
        return "home";
      }
    }
    • 뷰 이름은 home을 반환

    댓글

Designed by Tistory.