Part 7. 스프링 MVC 프로젝트의 기본 구성

7.5 Java 설정을 이용하는 경우의 프로젝트 구성

  • Java 설정을 이용한다면 pom.xml의 라이브러리 추가는 동일하지만 XML을 대신하는 클래스 파일이 필요하다.
  • 'jex02' 프로젝트를 작성했다면 프로젝트 생성 시 만들어진 XML 파일들을 삭제하고 org.zerock.config 패키지를 생성한다.
  • Java 설정을 이용하는 경우에는 pom.xml에 web.xml을 사용하지 않는 설정이 추가된다.
  • pom.xml 내에 < plugins > 내에 다음의 내용을 추가한다.
<pom.xml>
        <plugin>
            	<groupId>org.apache.maven.plugins</groupId>
            	<artifactId>maven-war-plugin</artifactId>
            	<version>3.2.0</version>
            	<configuration>
            		<failOnMissingWebXml>false</failOnMissingWebXml>	
            	</configuration>
            </plugin>
  • org.zerock.config 폴더에는 web.xml을 대신하는 WebConfig 클래스, root-context.xml을 대신하는 RootConfig 클래스, servlet-context.xml을 대신하는 ServletConfig 클래스를 작성한다.
<RootConfig 클래스>
package org.zerock.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
@MapperScan(basePackages= {"org.zerock.mapper"})
public class RootConfig {
	@Bean
	public DataSource dataSource() {
		HikariConfig hikariConfig = new HikariConfig();
		hikariConfig.setDriverClassName("net.sf.log4jdbc.sql.jdbcapi.DriverSpy");
		hikariConfig.setJdbcUrl("jdbc:log4jdbc:oracle:thin:@localhost:1521:XE");		
		hikariConfig.setUsername("book_ex");
		hikariConfig.setPassword("book_ex");		
		HikariDataSource dataSource = new HikariDataSource(hikariConfig);		
		return dataSource();
	}	
	@Bean
	public SqlSessionFactory sqlSessionFactory() throws Exception {
		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
		sqlSessionFactory.setDataSource(dataSource());
		return (SqlSessionFactory) sqlSessionFactory.getObject();
	}
}
  • ServletConfig 클래스는 아래와 같이 작성된다.
<ServletConfig 클래스>
package org.zerock.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 = { "org.zerock.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/");
	}
}
  • web.xml을 대신하는 WebConfig 클래스의 내용은 PART2에서 사용하는 것을 그대로 사용한다.
< WebConfig 클래스 >
package org.zerock.config;
import javax.servlet.ServletRegistration;
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() {
		return new Class[] { ServletConfig.class };
	}	
	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}	
	@Override
	protected void customizeRegistration(ServletRegistration.Dynamic registration) {		registration.setInitParameter("throwExceptionIfNoHandlerFound","true");
	}
}
  • 위의 작업 후 Oracle JDBC Driver의 설정과 log4jdbc.log4j2.porperties 등을 추가한다.
  • 프로젝트 구성 후에 테스트 코드를 통해 정상적인지 확인하고, Tomcat을 통해 실행 가능한지 확인해야 한다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글