使用Java配置SpringMVC


在此之前,一直使用的是XML的方式配置SpringMVC,現在為了適應Servlert3.0以及JavaConfig的Spring配置方式,在這里記錄一下使用Java代碼配置SpringMVC。首先,來回顧一下使用XML配置的過程:

1.在web.xml中配置DispatcherServlet

2.在SpringMVC配置文件中配置viewResolver(視圖解析器)

3.在SpringMVC配置文件中配置兩個基本配置

(

<mvc:annotation-driven/>

<mvc:default-servlet-handler/>

)

4.在SpringMVC配置文件中配置組件掃描Controller(注意與Spring的組件掃描分開,形成父子容器,這也是Spring建議的)

這幾步下來,SpringMVC基本上已經配置完成。我們使用Java配置的過程也大致如此。

配置DispatcherServlet

因為不再使用web.xml,那么去哪里配置DispatcherServlet ?

我們需要使用一個類繼承 AbstractAnnotationConfigDispatcherServletInitializer ,繼承之后這個類就相當於前端控制器了:

public class WebAppinitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?> [] {RootConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?> [] {WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}

getRootConfigClasses()方法用於獲取根容器的配置類;(Spring的配置文件),相當於父容器配置,這里使用的是名為RootConfig的類

getServletConfigClasses()方法用於獲取web容器的配置類(SpringMVC配置文件),相當於子容器配置,這里使用的是名為WebConfig的類

getServletMappings() 方法就是用於表明DispatcherServlet的映射信息,“/”表示攔截所有請求,因為是個字符串數組,所以可以寫多個映射。

SpringMVC的配置

SpringMVC的基本配置包括:視圖解析器,兩個基本配置。編寫一個配置類繼承 WebMvcConfigurerAdapter 
@Configuration
@ComponentScan(value="com.atguigu",includeFilters={
        @Filter(type=FilterType.ANNOTATION,classes={Controller.class})
},useDefaultFilters=false)
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter{

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/view/");
        viewResolver.setSuffix(".jsp");return viewResolver;
    }
    
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    
}

在這里我是將視圖解析器配置為一個Bean,還可以直接重寫WebMvcConfigurerAdapter 類的 configureViewResolvers方法,效果是一樣的

@Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/view/", ".jsp");
    }

@EnableWebMvc 注解就相當於應用了<mvc:annotation-driven/> ,啟用了SpringMVC的高級特性

重寫 configureDefaultServletHandling 方法就是將SpringMVC不能處理的靜態資源交給Tomcat處理,相當於<mvc:default-servlet-handler/>

Spring的配置

因為要使用父子容器的方式,所以還需要配置Spring,在這里不用配置太復雜,直接掃描除了Controller層的其他組件即可

@Configuration
@ComponentScan(value="cn.lynu",excludeFilters={
        @Filter(type=FilterType.ANNOTATION,classes={Controller.class})
})
public class RootConfig {

}

因為這里只是簡單的處理Web層,所以不需要太復雜,在這個Spring配置類中就沒有任何方法

OK,至此SpringMVC的Java配置方式已經完成了。繼承 AbstractAnnotationConfigDispatcherServletInitializer的方式,會自動注冊DispatcherServlet和ContextLoaderListener,而使用XML的方式,我們還需要自己在web.xml中完成它們的注冊。
 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com