[B -2-7] 스프링 MVC 프로젝트의 기본 구조 1
스프링 MVC
스프링 MVC는 스프링의 서브 프로젝트중 하나일 뿐이다.
스프링에는 여러가지 서브 프로젝트들이 존재한다.
[B-2-6] 까지는 스프링의 코어 설정을 한 것이다.
- RootConfig.class : Spring Core, MyBatis
[B-2-7] 부터는 스프링 MVC 프로젝트를 설정한다.
- ServletConfig.class : Spring MVC
스프링의 서브 프로젝트 리스트
Spring Projects
The Spring portfolio has many projects, including Spring Framework, Spring IO Platform, Spring Cloud, Spring Boot, Spring Data, Spring Security...
spring.io
서블릿 환경설정 파일 생성 : ServletConfig
src/main/java
com.spms.config
ServletConfig.java
package com.spms.config;
import org.springframework.context.annotation.ComponentScan;
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;
@EnableWebMvc
@ComponentScan(basePackages = {"com.spms.controller"})
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/");
}
}
웹 MVC 사용 허용 : @EnableWebMvc
컴포넌트 검색 : @ComponentScan
다른 패키지에 작성된 스프링의 빈 객체(Bean)을 인식할 수 있다.
기본 패키지는 컨트롤러로 설정 : com.spms.controller
웹 MVC 환경 설정자 : WebMvcConfigurer 인터페이스 구현
스프링 MVC 관련 설정을 메서드로 오버라이드하는 형태를 이용시 사용
configureViewResolvers() : 뷰(View) 관련 환경설정 (jsp) 위치
addResourceHandlers() : 뷰(View) 관련 환경설정 (javascript, css) 위치
위의 환경설정들을 지정한 후에, 환경설정에 적용(환경설정 빈 객체 리턴)한다.
웹 환경설정 파일 수정 : WebConfig
src/main/java
com.spms.config
WebConfig.java
getServletConfigClasses()
getServletMappings()
package com.spms.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { RootConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class[] { ServletConfig.class };
}
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[] { "/" };
}
}
getServletConfigClasses()
서블릿 환경설정 클래스 지정 : ServletConfig.class
getServletMappings()
서블릿 환경설정 URL 매핑 : /
웹 MVC 기동 테스트 : http://localhost/
기본 MVC 테스트가 문제없이 잘 됨을 알 수 있다.
하지만, ? 부분 문자가 깨져있는데, 사실은 한글문자이다.
대책방법은 UTF-8 캐릭터 인코딩 필터를 추가해야 한다.
웹 환경설정 파일 수정 (캐릭터 인코딩 필터 추가) : WebConfig
src/main/java
com.spms.config
WebConfig.java
getServletConfigClasses()
package com.spms.config;
import javax.servlet.Filter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { RootConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class[] { ServletConfig.class };
}
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[] { "/" };
}
@Override
protected Filter[] getServletFilters() {
// TODO Auto-generated method stub
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
return new Filter[] { characterEncodingFilter };
}
}
UTF-8 캐릭터 인코딩 필터를 만들어서 환경설정에 적용한다.
웹 MVC 기동 테스트 (캐릭터 인코딩 적용) : http://localhost/
한글 캐릭터까지 문제없이 나오는 것을 알 수 있다.