springboot 配置多個DispatcherServlet 實現前端接口和後臺管理端路徑規則的分離

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結尾的請求才能響應頁面
在這裏插入圖片描述

發佈了17 篇原創文章 · 獲贊 41 · 訪問量 6285
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章