I T H

[스프링프로젝트연습 4] 스프링 설정하기 - Java Config 본문

Spring Basic

[스프링프로젝트연습 4] 스프링 설정하기 - Java Config

thdev 2024. 1. 22. 14:27
  • 신규 프로젝트를 진행하는 과정에서 스플이 버전 및 신규 기능을 적용하고자 스프링 버전은 5.xx 버전을 사용하고 xml 설정이 아닌 Java Config를 통하여 설정을 진행하고자 한다.

해당 문서에서는 공통 라이브러리를 참조한 이후 Java Config 설정을 통한 컨트롤러 호출까지 테스트를 진행하는 방법을 설명함.

 

[스프링 프레임워크 적용- Java Config]

1. web.xml 파일 삭제

-  Java 클래스 파일을 통한 설정으로만 진행하기 위해 pom.xml 파일은 제외하고 모든 xml(설정용xml)을 삭제하고자 한다. 따라서 web.xml 파일을 삭제함.

- web.xml 파일을 사용하지 않는다는 것을 프로젝트에 알려주기 위해 아래와 같이 pom.xml 파일 설정을 변경한다.

(failOnMissingWebXml 부분)

 

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>3.2.2</version>
  <configuration>
    <failOnMissingWebXml>false</failOnMissingWebXml>
  </configuration>
</plugin>

 

2. RootConfig 클래스 생성

- root-context.xml 파일을 대체하는 자바 클래스

- 데이터베이스 접속 정보 Bean 및 Bean 객체를 등록하여 관리하는 클래스

- 데이터베이스 연동 및 Mabatis 매퍼 클래스(인터페이스) 들을 스캔하기 위하여 어노테이션이 추후 추가될 예정

- 우선은 빈 껍데기 수준의 클래스 파일을 생성하여 사용

 

package kr.co.values.init;

import org.springframework.context.annotation.Configuration;

/**
 * @Configuration 스프링 설정 파일로서 스프링 컨테이너를 생성하게 만드는 어노테이션 
 * 해당 어노테이션이 붙은 클래스는 Config 파일이 되어 xml 파일과 같은 기능을 한다. 
 * 
 * Bean 객체를 설정하는 파일
 */
@Configuration
public class RootConfig {
	
}

 

3. ServletConfig 클래스 생성

- servlet-context.xml 파일을 대체하는 자바 클래스

- 리소스(이미지 등) 경로 정보 설정 및 viewResolver( 뷰 리졸버) 등의 설정 정보를 작성한다.

- Controller 클래스 파일들을 스캔한다.

 

package kr.co.values.init;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

/**
 * servlet-context.xml 파일을 대신하는 클래스 
 * @ComponentScan 을 통하여 컨트롤러 클래스가 존재하는 패키지를 자동 스캔한다.
 */
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "kr.co.values.web" } )
public class ServletConfig implements WebMvcConfigurer {
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		InternalResourceViewResolver bean = new InternalResourceViewResolver();
		bean.setViewClass(JstlView.class);
		bean.setPrefix("/WEB-INF/views/");
		bean.setSuffix(".jsp");
		registry.viewResolver(bean);
	}

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
	}
  }

 

4. WebConfig 클래스 생성

- web.xml 파일을 대체하는 자바 클래스

- 스프링 구동과 관련된 클래스(설정) 정보들을 작성해주고 사용하도록 한다.

- 해당 클래스를 구현하는 방법은 2가지 이다.

- 한가지는 AbstractAnnotationConfigDispatcherServletInitializer 클래스를 상속받아 구현하는 방법(현재 적용한 방법)

- 다른 한가지는 WebApplicationInitializer 인터페이스를 구현받는 방법

 

package kr.co.values.init;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * 웹 컨텍스트 설정파일
 * 
 * @Bean Bean 객체를 만드는 어노테이션 (<bean> 태그와 같은 역할)
 * return 할 때 새로운 객체를 new를 이용해서 반환한다
 * 클래스는 xml의 class와 동일, 클래스 명은 xml의 id와 동일하다
 * 
 * web.xml 파일을 대신하는 클래스
 */

public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

	/**
	 * root-context.xml 파일을 대신하는 클래스를 지정하는 메소드 
	 */
	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class[] {RootConfig.class};
	}

	/**
	 * servlet config 파일을 대신하는 클래스를 지정하는 메소드 
	 */
	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class[] {ServletConfig.class};
	}

	/**
	 * Spring MVC 기본 경로를 설정하는 메소드 
	 */
	@Override
	protected String[] getServletMappings() {
		return new String[] {"/"};
	}


}

 

5. 테스트 컨트롤러 구현

- kr.co.values 패키지 아래에 web 패키지를 생성 후 MainController 클래스 파일을 1개 생성한다.

- 해당 클래스에는 "/main/home.do"로 접속하는 경우 특정 페이지로 이동하도록 컨트롤러를 구축한다.

 

package kr.co.values.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";
    }

}

 

[ 최종 폴더 구성 확인  백엔드 ]

 

 

6. JSP 생성

- WEB-INF/views/main 폴더를 생성 후 아래에 home.jsp 파일을 생성하여 준다.

- 서버 구동 후 정상 접속 시 해당 페이지가 출력이 되면 된다.

 

<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>Hello Home!!!</h2>
</body>
</html>

 

[ 최종 폴더 구성 확인  프론트]

 

 

http://localhost:8082/main/home.do 로 접속 시 정상접속 확인!

 

[결과화면]