springboot 默認配置了一個DispatcherServlet 實現數據和頁面的請求分開處理,通過
定義ServletRegistrationBean的對象實現,這個bean是由spring boot提供專門來註冊servlet的,可以象註冊bean一樣去配置servlet。
複寫 spring boot提供的ServletRegistrationBean
該DispatcherServlet負責處理以.html結尾的請求,並開放靜態資源。
@Bean
public ServletRegistrationBean<DispatcherServlet> dispatcherRegistration(DispatcherServlet dispatcherServlet) {
ServletRegistrationBean<DispatcherServlet> registration = new ServletRegistrationBean<DispatcherServlet>(dispatcherServlet);
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
applicationContext.register(DispatcherControllerConfig.class);
dispatcherServlet.setApplicationContext(applicationContext);
registration.addUrlMappings("*.html","*.js","*.css","*.png","*.jpg","*.gif","*.woff");
return registration;
}
DispatcherControllerConfig:對默認的ServletRegistrationBean的靜態資源訪問路徑進行映射
@Configuration
@EnableWebMvc
public class DispatcherControllerConfig implements WebMvcConfigurer{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
}
定義自定義的servletServletRegistrationBean
該DispatcherServlet負責處理以.json結尾的請求,也就是數據。
@Bean
public ServletRegistrationBean<HttpServlet> bar() {
DispatcherServlet dispatcherServlet = new DispatcherServlet();
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
applicationContext.register(RestControllerConfig.class);
applicationContext.scan("cn.rest.controller");
dispatcherServlet.setApplicationContext(applicationContext);
ServletRegistrationBean<HttpServlet> servletRegistrationBean = new ServletRegistrationBean<HttpServlet>(dispatcherServlet);
servletRegistrationBean.setName("restServlet");
servletRegistrationBean.addUrlMappings("*.json");
return servletRegistrationBean;
}
RestControllerConfig:設置自定義的的ServletRegistrationBean的靜態資源訪問路徑,禁止訪問靜態資源
@Configuration
@EnableWebMvc
public class RestControllerConfig extends WebMvcConfigurerAdapter{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**");
}
}
end
只有以.json結尾的請求才能拿到響應數據
只有以.html結尾的請求才能響應頁面