SPRING
2017.06.03 / 15:50

[½ºÇÁ¸µ 3.1] web.xmlÀÌ ¾ø´Â ÀÚ¹Ù À¥ ¾ÖÇø®ÄÉÀ̼Ç

±Ý±Ý±Ý
Ãßõ ¼ö 320

Spring 3.1ºÎÅÍ Servlet 3.0À» Áö¿øÇϴµ¥, Servelt 3.0 ºÎÅÍ web.xml ¾øÀÌ ÀÚ¹Ù À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¹èÆ÷ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. µû¶ó¼­ Á¤È®È÷´Â ½ºÇÁ¸µ 3.1 ¾øÀ̵µ web.xml ¾ø´Â ÀÚ¹Ù À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé ¼ö ÀÖ½À´Ï´Ù.

±×·±µ¥.. Á¶±Ý ±ÍÂúÀº ºÎºÐÀÌ Àְŵç¿ä; ±×·± ±ÍÂúÀº ÀÛ¾÷À» ½ºÇÁ¸µÀÌ ´ë½Å ÇØÁÖ°í °³¹ßÀÚ´Â ¼­ºí¸´À̳ª ÇÊÅ͸¸ µî·ÏÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.

±ÍÂúÀº ÀÛ¾÷¿£ ¹¹°¡ Àֳĸ顦 ÀÏ´Ü ÀÚ¹Ù SPI¸¦ »ç¿ëÇÏ´Â ¹æ½ÄÀ̱⠶§¹®¿¡, META-INF/services µð·ºÅ丮¿¡ javax.servlet.ServletContainerInitializer¶ó´Â À̸§ÀÇ ÆÄÀÏÀ» ¸¸µé¾î Áà¾ß ÇÕ´Ï´Ù.

±×¸®°í ServletContainerInitializerÀÇ ±¸Çöü¸¦ ¸¸µé°í ±× À§¿¡ @HandlerTypes¶ó´Â ¾Ö³ëÅ×À̼ÇÀ» ºÙÀ̸鼭 @HandlerTypes ¾Ö³ëÅ×ÀÌ¼Ç ¾È¿¡.. ServletContainerInitializerÀÇ onStart ¸Þ¼­µåÀÇ Ã¹¹ø° ¸Å°³º¯¼ö·Î ¹ÞÀ» Ŭ·¡½º ŸÀÔÀ» ¸í½ÃÇØ Áà¾ß ÇÕ´Ï´Ù. ±× ŸÀÔÀ» A¶ó°í Çغ¸ÁÒ.

±×·³ ÀÌÁ¦ A ŸÀÔÀÇ ±¸Çöü¸¦ ¸¸µé°Å³ª, »ó¼Ó ¹ÞÀº Ŭ·¡½º°¡ onStart ¸Þ¼­µåÀÇ Ã¹¹ø° ¸Å°³º¯¼ö·Î Àü´Þ µË´Ï´Ù.

±ÍÂúÁÒ;; ±×·¡¼­ ½ºÇÁ¸µÀÌ ´Ù Çصװí, ¿ì¸®´Â ±×³É WebApplicationInitializer ÀÎÅÍÆäÀ̽º¸¸ ±¸ÇöÇÏ¸é µË´Ï´Ù.

public class WebAppIntializer implements WebApplicationInitializer {
 
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        //parent
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(AppConfig.class);
 
        servletContext.addListener(new ContextLoaderListener(rootContext));
//        new ContextLoader(rootContext).initWebApplicationContext(servletContext);
 
        //child
        AnnotationConfigWebApplicationContext dispatcherServletContext = new AnnotationConfigWebApplicationContext();
        dispatcherServletContext.register(WebConfig.class);
 
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("spring", new DispatcherServlet(dispatcherServletContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}

ÀÌ·¸°Ô¿ä. ÀÌ°Ô web.xmlÀ» ´ë½ÅÇÑ´Ù°í º¸¸é µË´Ï´Ù.

³ª¸ÓÁö XMLÀº ½ºÇÁ¸µ ºó ¼³Á¤ ÆÄÀÏÀÌ Àִµ¥, ½ºÇÁ¸µ 3.0ºÎÅÍ ÀÌ¹Ì ÀÚ¹Ù·Î ºó ¼³Á¤À» ÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. ±×·±µ¥, À̹ø ½ºÇÁ¸µ 3.1Àº ±× ±â´ÉÀ» ´ëÆø °­È­ÇÏ¿© XML ³×ÀÓ½ºÆäÀ̽º¿¡ ÇØ´çÇÏ´Â ºó ¼³Á¤µµ ÀÚ¹Ù ¼³Á¤À¸·Î °¡´ÉÇÏ°Ô ÇØÁÝ´Ï´Ù. ¹°·Ð ÀüºÎ´Â ¾Æ´Ï±¸¿ä. ÀϺθ¸¿ä¡¦ (±×·¡¼­ »ç½Ç ½ºÇÁ¸µ ÀÚ¹Ù ¼³Á¤À» ±×¸® ¸¹ÀÌ »ç¿ëµÉ °Í °°Áø ¾Ê´Ù°í »ý°¢ÇÕ´Ï´Ù.)

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = "whiteship", excludeFilters = {@ComponentScan.Filter(Configuration.class), @ComponentScan.Filter(Controller.class)})
public class AppConfig {
@Bean(destroyMethod = "shutdown")
public DataSource dataSource(){
return new EmbeddedDatabaseBuilder()
.setName("bookDB")
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:book-schema.sql")
.build();
}
@Bean
public JdbcTemplate jdbcTemplate(){
return new JdbcTemplate(dataSource());
}
@Bean
public PlatformTransactionManager transactionManager(){
return new DataSourceTransactionManager(dataSource());
}
}
view rawAppConfig.java hosted with ❤ by GitHub

ÀÚ¹Ù ¼³Á¤µµ xml ó·³ À¥¿ë ¼³Á¤°ú ºñÀ¥¿ë ¼³Á¤À¸·Î ³ª´²¼­ ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°Ç Root ACWAC¿¡¼­ »ç¿ëÇÒ ºñÀ¥¿ë ¼³Á¤ÀÌ°í¡¦

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "whiteship",
useDefaultFilters = false,
includeFilters = @ComponentScan.Filter(Controller.class))
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**");
}
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
view rawWebConfig.java hosted with ❤ by GitHub

ÀÌ°Ç À¥¿ë ºóÀ» ¼³Á¤ÇÑ Child ACWACÀÔ´Ï´Ù.

Àüü ¾ÛÀº Github¿¡ ¿Ã·ÁµÎ¾ú½À´Ï´Ù.

https://github.com/keesun/swagger-noxml-mvc

ÀÚ¼¼ÇÑ ³»¿ëÀº À̹øÁÖ Åä¿äÀÏ º½½Ï ½º¿þ°Å Ã¥°ÉÀ̶§ ¸»¾¸µå¸®°Ú½À´Ï´Ù.