📗 스프링 Spring

[스프링/Spring] Spring MVC 세팅 Java

핑크빛연어 2021. 5. 13. 14:50

 

Spring MVC 프로젝트 세팅 시 java 로 환경설정을 세팅하는 방법입니다.

 

 

xml 로 환경설정을 세팅하는 방법은 이전 게시물을 확인해주세용!

eunoia3jy.tistory.com/37

 

[ 스프링 / Spring ] Spring MVC 세팅 XML

Spring MVC 프로젝트 세팅 시 xml 로 환경설정을 세팅하는 방법입니다. web.xml 파일을 이용해서 스프링 웹 어플리케이션의 환경설정을 세팅할 수 있습니다. 프로젝트명/WebContent/WEB-INF 경로에 config 폴

eunoia3jy.tistory.com

 

 

 

config 패키지를 만들고 해당 경로에 SpringConfigClass.java, ServletAppContext.java, RootAppContext.java 를 생성합니다.

 

 

xml로 세팅하는 방법과 Java 로 세팅하는 방법을 구분해보면 이렇게 됩니다.

구분 xml 로 세팅 Java 로 세팅 Java 로 세팅 시 방법
DispatcherServlet 설정 web.xml SpringConfigClass.java AbstractAnnotationConfigDispatcherServletInitializer 상속 또는 WebApplicationInitializer 인터페이스 구현
서블릿 영역 설정 servlet-context.xml ServletAppContext.java WebMvcConfigurer 인터페이스 구현
어플리케이션 영역 설정 root-context.xml RootAppContext.java  

 

 

작성 및 수정한 파일 목록 입니다.

 

1. pom.xml

2. SpringConfigClass.java

3. ServletAppContext.java

4. RootAppContext.java

 

 

 

1. pom.xml

xml 로 세팅할때와 똑같이 

servlet , jsp , jstl, spring 의존성을 추가하기 위해

servlet-api, jsp-api, jstl, springWebMVC 라이브러리를 설정합니다.

	<!-- 라이브러리 버전 관리 -->
	<properties>
		<javax.servlet-version>4.0.1</javax.servlet-version>
		<javax.servlet.jsp-version>2.3.3</javax.servlet.jsp-version>
		<javax.servlet.jsp.jstl-version>1.2</javax.servlet.jsp.jstl-version>
		<org.springframework-version>4.3.25.RELEASE</org.springframework-version>
	</properties>
	<!-- 라이브러리 셋팅 -->
	<dependencies>
		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>${javax.servlet-version}</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>${javax.servlet.jsp-version}</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>${javax.servlet.jsp.jstl-version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
	</dependencies>

 

 

 

 

2. SpringConfigClass.java

AbstractAnnotationConfigDispatcherServletInitializer 상속 하는 방법과

WebApplicationInitializer 인터페이스 구현하는 방법이 있습니다.

 

AbstractAnnotationConfigDispatcherServletInitializer 상속

package com.my.spring.config;

import javax.servlet.Filter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpringConfigClass extends AbstractAnnotationConfigDispatcherServletInitializer {

	//DispatcherServlet에 매핑할 요청 주소를 셋팅한다.
	@Override
	protected String[] getServletMappings() {
		return new String[] {"/"};
	}

	//Spring MVC 프로젝트 설정을 위한 클래스를 지정한다.
	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class[] {ServletAppContext.class};
	}
	
	//프로젝트에서 사용할 Bean들을 정의기 위한 클래스를 지정한다.
	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class[] {RootAppContext.class};
	}
	
	//파라미터 인코딩 필터 설정
	@Override
	protected Filter[] getServletFilters() {
		// TODO Auto-generated method stub
		CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
		encodingFilter.setEncoding("UTF-8");
		return new Filter[] {encodingFilter};
	}
	
}

 

WebApplicationInitializer 인터페이스 구현 

package com.my.spring.config;

import javax.servlet.FilterRegistration;
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.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;

public class SpringConfigClass implements WebApplicationInitializer {

	@Override
	public void onStartup(ServletContext servletContext) throws ServletException {
		System.out.println("===== onStartup()");
		
		//Spring MVC 프로젝트 설정을 위해 작성하는 클래스의 객체를 생성한다.
		AnnotationConfigWebApplicationContext servletAppContext = new AnnotationConfigWebApplicationContext();
		servletAppContext.register(ServletAppContext.class);
		
		
		//요청 발생 시 요청을 처리하는 서블릿을 DispatcherServlet으로 설정해준다.
		DispatcherServlet dispatcherServlet = new DispatcherServlet(servletAppContext);
		ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", dispatcherServlet);
		
		//부가 설정
		servlet.setLoadOnStartup(1);  //<load-on-startup>1</load-on-startup>
		servlet.addMapping("/");  
		
		//Bean을 정의하는 클래스를 지정한다
		AnnotationConfigWebApplicationContext rootAppContext = new AnnotationConfigWebApplicationContext();
		rootAppContext.register(RootAppContext.class);
		
		//ContextLoaderListener 리스너 설정 
		ContextLoaderListener listener = new ContextLoaderListener(rootAppContext);
		servletContext.addListener(listener);  
		
		//파라미터 인코딩 필터 설정
		FilterRegistration.Dynamic filter = servletContext.addFilter("encodingFilter", CharacterEncodingFilter.class);
		filter.setInitParameter("encoding", "UTF-8");
		filter.addMappingForServletNames(null, false, "dispatcher");
	}
	
}

 

 

 

3. ServletAppContext.java

// Spring MVC 프로젝트에 관련된 설정을 하는 클래스
@Configuration

//@EnableWebMvc :: Controller 어노테이션이 셋팅되어 있는 클래스를 Controller로 등록한다. //<annotation-driven/>
@EnableWebMvc

//스캔할 패키지를 지정한다.  //<context:component-scan base-package="com.my.spring.controller"/>
@ComponentScan("com.my.spring.controller")

public class ServletAppContext implements WebMvcConfigurer{
	
	// Controller의 메서드가 반환하는 jsp의 이름 앞뒤에 경로와 확장자를 붙혀주도록 설정한다.
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
//		WebMvcConfigurer.super.configureViewResolvers(registry);
//		configureViewResolvers(registry);
		registry.jsp("/WEB-INF/views/", ".jsp");
	}


	// 정적 파일의 경로를 매핑한다.
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
//		WebMvcConfigurer.super.addResourceHandlers(registry);
//		addResourceHandlers(registry);
		registry.addResourceHandler("/**").addResourceLocations("/resources/");
	}

}

 

 

 

4. RootAppContext.java

package com.my.spring.config;

import org.springframework.context.annotation.Configuration;

//프로젝트 작업시 사용할 bean 을 정의하는 클래스 
@Configuration
public class RootAppContext {

}

 

 

 

🐺🐗🐴🦄

 

 

 

728x90
반응형