SpringBoot学习(2)-- SpringBoot配置了 server.servlet.path 后无效的解决方案

引言

在springboot 1.x 版本的时候,如果要制定访问规则,例如:*.action 这种格式,只需要在配置文件中进行如下配置即可:

server.servlet.path=*.action

但是,到了springboot2.x版本,使用过的兄弟们会发现,这个配置方式被划了一横,表示已经被废弃了,那么今天,就告诉大家,怎么通过配置,达到配置规则这个目的。

解决方式

首先,要明确的是,web有三大组件,Linstener -> Fliter -> Servlet,其中,servlet用于:接受请求、处理请求、返回响应我们可以从这点入手。
在springboot的依赖中,找到 ServletRegistrationBean 这个类,随即下载源码,可以找到其中的一个方法。

/**
	 * Add URL mappings, as defined in the Servlet specification, for the servlet.
	 * @param urlMappings the mappings to add
	 * @see #setUrlMappings(Collection)
	 */
	public void addUrlMappings(String... urlMappings) {
		Assert.notNull(urlMappings, "UrlMappings must not be null");
		this.urlMappings.addAll(Arrays.asList(urlMappings));
	}

由注释不难看出,添加一个或者多个url映射,不难看出他的参数是可以是多个,那么,我们通过改写配置调用这个方法,或许可以达到我们的目的。

重写配置

首先,新建一个java类,我这里命名为:Myconfig

package com.jackosn.config;

import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;

@Configuration
public class MyConfig {
    @Bean
    public ServletRegistrationBean MyBean(){
        ServletRegistrationBean bean = new ServletRegistrationBean();
        bean.addUrlMappings("*.action","*.aaa");
        return bean;
    }
}

代码比较简单,大家看看就好啦。
讲道理,这样子就可以达到我们的目的,但是在启动的时候呢,报错了。

Servlet must not be null

转念一想,可能需要把Servlet当成参数传进去,所以,改写配置类如下:

package com.jackosn.config;

import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;

@Configuration
public class MyConfig {
    @Bean
    public ServletRegistrationBean MyBean(DispatcherServlet servlet){
        ServletRegistrationBean bean = new ServletRegistrationBean(servlet);
        bean.addUrlMappings("*.action","*.aaa");
        return bean;
    }
}

以上。

祝大家敲码愉快~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章