zoukankan      html  css  js  c++  java
  • springboot url映射

    1、问题背景

       之前使用SpringMVC在web.xml配置过如下url映射,切换到springboot后,无法访问*.do请求

    <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:dispatcherContext.xml</param-value>
            </init-param>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <url-pattern>*.do</url-pattern>
            <url-pattern>*.json</url-pattern>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

      

    2、SpringMVC的servlet的url-pattern匹配规则

      四种匹配模块

      2.1 精确匹配

       <url-pattern>中配置的项必须与url完全精确匹配。

      2.2 路径匹配

      以“/”字符开头,并以“/*”结尾的字符串用于路径匹配

      2.3 扩展名匹配

      以“*.”开头的字符串被用于扩展名匹配

      2.4 缺省匹配

      以上都找不到servlet,就用默认的servlet,配置为<url-pattern>/</url-pattern>

      可参考https://www.cnblogs.com/canger/p/6084846.html

    3、Springboot的url匹配规则

      解决方案:将WebMvcConfigurer接口的setUseSuffixPatternMatch,设置为true;

      查询到的解决方案一:

      (1)启动类 extends WebMvcConfigurationSupport

      (2)重写configurePathMatch方法

      存在问题:无法访问静态资源

      查询到的解决方案二:

      (1)启动类 extends WebMvcConfigurerAdapter

      (2)重写configurePathMatch方法

      可参考:http://412887952-qq-com.iteye.com/blog/2398639

      

    4.自己的实现

      为了启动类的简洁,使用了一个@Configuration类来重写

    /**
     * @Author: chenhao
     * @Date: 2018-07-24
     */
    
    @Configuration
    public class CustomwebMvcConfigurer extends WebMvcConfigurerAdapter {
        // 如果继承了WebMvcConfigurationSupport,会覆盖访问静态资源的配置,无法访问静态资源,必须继承WebMvcConfigurerAdapter
        @Override
        public void configurePathMatch(PathMatchConfigurer pathMatchConfigurer) {
            //是否是后缀模式匹配,如果是true,请求download.* 可以映射到download
            pathMatchConfigurer.setUseSuffixPatternMatch(true);
        }
    
    }

      

  • 相关阅读:
    iOS- 网络访问JSON数据类型与XML数据类型的实现思路及它们之间的区别
    iOS- AVSpeechSynthesizer——iOS7语音合成器
    iOS- 利用AFNetworking(AFN)
    iOS- 利用AFNetworking(AFN)
    iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现
    iOS- 多线程技术的概述及优点
    150. Best Time to Buy and Sell Stock II【medium】
    213. String Compression【easy】
    495. Implement Stack【easy】
    547. Intersection of Two Arrays【easy】
  • 原文地址:https://www.cnblogs.com/chenhao0302/p/9365935.html
Copyright © 2011-2022 走看看