Spring MVC 프로젝트 세팅 시 java 로 환경설정을 세팅하는 방법입니다.
xml 로 환경설정을 세팅하는 방법은 이전 게시물을 확인해주세용!
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
반응형
'📗 스프링 Spring' 카테고리의 다른 글
[스프링/Spring] 요청방식 (@RequestMapping / @GetMapping / @PostMapping) (0) | 2021.05.13 |
---|---|
[스프링/Spring] URL Mapping (0) | 2021.05.13 |
[스프링/Spring] Spring MVC 세팅 XML (0) | 2021.05.13 |
[스프링/Spring] Spring MVC - DispatcherServlet (0) | 2021.05.06 |
[스프링/Spring] Spring MVC (0) | 2021.04.13 |