본문 바로가기
프로그래밍/스프링프레임워크

Maven 웹 프로젝트에 스프링프레임워크 적용하기

by pentode 2019. 3. 13.

Maven 웹 프로젝트에 스프링프레임워크를 적용해 보기로 했습니다. 혼자 해보는거니 될 수 있는 한 최신 버전으로 올려봅니다.


스프링프레임워크를 설정하고 시작하는 방법은 xml 을 사용하는 방법과 Java 클래스를 사용하는 방법이 있습니다. 여기서는 클래스를 사용하는 방법으로 적용해봅니다. "스프링프레임웍의 시동" 을 읽어보시면 도움이 되실것입니다.



앞의 "Maven 웹 프로젝트 서블릿 3.1로 업그레이드 하기" 에서 만든 예제에 추가해서 작성합니다. 전체소스는 글 하단에 추가해 두었으니 참고하시가 바랍니다.



1. pom.xml 파일에 프로퍼티를 추가합니다.


프로퍼티는 자주 사용하는 값을 미리 정의해두는 방법입니다. Java 버전은 1.8을 사용하고, 스프링프레임워크 5.1.5.RELEASE 버전을 사용합니다.


<properties>

    <java-version>1.8</java-version>

    <org.springframework-version>5.1.5.RELEASE</org.springframework-version>

</properties>


2. pom.xml 파일에 스프링프레임웍 의존성을 추가합니다.


위에서 정의한 프로퍼티를 이용하여 버전을 지정했습니다. spring-webmvcspring-core, spring-context, spring-web, spring-aop, spring-beans, spring-expression에 대해 의존성이 있으므로 이 의존 라이브러리들이 자동으로 포함되어 집니다.


<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-webmvc</artifactId>

    <version>${org.springframework-version}</version>

</dependency>


3. 스프링 시작 클래스를 만듭니다.


Java 클래스와 Annotation 기반의 설정을 사용합니다. Root 컨텍스트 설정, Web 컨텍스트 설정, *.do 확장자를 처리하는 서블릿 디스패처 설정을 합니다.


package com.tistory.offbyone.init;


import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletRegistration;


import org.springframework.web.WebApplicationInitializer;

import org.springframework.web.context.ContextLoaderListener;

import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;

import org.springframework.web.servlet.DispatcherServlet;


/**

 * 스프링프레임워크 시작파일

 */

public class SpringStarter implements WebApplicationInitializer {


    /**

     * 컨텍스트를 시작한다.

     */

    @Override

    public void onStartup(ServletContext servletContext) throws ServletException {


        // Root Context

        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();

        rootContext.register(com.tistory.offbyone.init.RootContextConfiguration.class);

        servletContext.addListener(new ContextLoaderListener(rootContext));


        // Web Context

        AnnotationConfigWebApplicationContext dispatcherContext =  new AnnotationConfigWebApplicationContext();

        dispatcherContext.register(WebContextConfiguration.class);


        // Dispatcher Servlet

        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));

        dispatcher.setLoadOnStartup(1);

        dispatcher.addMapping("*.do");

    }

}


4. Root 컨텍스트 설정파일 입니다.


이 예제에서는 하는게 없습니다. 다음 글에서 이부분의 좀더 상세한 설정이 나오게 되겠습니다.


package com.tistory.offbyone.init;


import org.springframework.context.annotation.Configuration;


/**

 * 루트 컨텍스트 설정파일

 */

@Configuration

public class RootContextConfiguration {

}


5. Web 컨텍스트 설정파일


웹 컨텍스트 설정에서는 컨트롤러를 스캔해서 올리고, 뷰 리졸버를 설정합니다.


package com.tistory.offbyone.init;


import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.ViewResolver;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import org.springframework.web.servlet.view.InternalResourceViewResolver;


/**

 * 웹 컨텍스트 설정파일

 */

@Configuration

@EnableWebMvc

@ComponentScan(basePackages = {"com.tistory.offbyone.web"})

public class WebContextConfiguration  implements WebMvcConfigurer {

    /**

     * 뷰 리졸버를 설정한다.

     * @return

     */

    @Bean

    public ViewResolver getViewResolver() {

        InternalResourceViewResolver resolver = new InternalResourceViewResolver();

        resolver.setPrefix("/WEB-INF/jsp/");

        resolver.setSuffix(".jsp");

        return resolver;

    }

}


6. 컨트롤러를 만들어 봅니다.


이 컨트롤러는 단순히 뷰페이지로 보내는 역할만 합니다. http://localhost:8080/mavenweb/main/home.do 을 브라우저에서 요청하면 뷰 리졸버 설정에 따라 "/WEB-INF/jsp/main/home.jsp" 파일이 뷰로 실행됩니다.


package com.tistory.offbyone.web;


import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;


@Controller

public class MainController {


    @RequestMapping("/main/home.do")

    public String home() {

        return "main/home";

    }

}


7. home.jsp 파일입니다.


별 내용이 없습니다. 호출되는지 확인용 입니다.


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>HOME</title>

</head>

<body>

<h2>Hello Home!</h2>

</body>

</html>


8. 실행결과 입니다.


스프링프레임워크가 정상적으로 동작하여 /main/home.do 요청에 대해 /WEB-INF/jsp/main/main.jsp 가 실행되었습니다.


실행결과


 ※ 전체소스

mavenweb.zip


반응형