• "/" 、"/*、"/**"在spring-webmvc中的注意事项


    控制器(Controller)

    • "/":拦截后端接口请求,即通过@Controller@RestController@RequestMapping标记的类,用于后端接口。

    • "/*":拦截所有请求,除了后端接口包括,资源文件、JSP页面等。

    用web.xml配置,一般配置为"/"。

    <servlet>
        <servlet-name>SpringMvcDispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>SpringMvcDispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    如果是使用SpringBoot的项目,添加spring-boot-starter-web依赖即可,无需xml配置,默认的url-pattern也是"/”。
    自动配置原理:

    1. spring-boot-starter-web包依赖了spring-webspring-webmvcspring-boot-autoconfigure
    2. spring-boot-autoconfigure包的META-INF/spring.factories文件里包含了webmvc的自动配置类org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
    3. WebMvcAutoConfiguration类标记@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class})
    4. DispatcherServletAutoConfiguration配置了DispatcherServletDispatcherServletRegistrationBean,并标记@EnableConfigurationProperties(ServerProperties.class)
    5. ServerProperties的内部类Servlet的path属性默认为"/"

    拦截器(HandlerInterceptor)

    1. 定义
      spring-webmvc提供了org.springframework.web.servlet.HandlerInterceptor拦截器接口方便自定义扩展,根据不同场景实现preHandlepostHandleafterCompletion方法。

    2. 使用
      配置类实现WebMvcConfigurer接口的addInterceptors(InterceptorRegistry)方法,registry.addInterceptor(HandlerInterceptor).addPathPatterns(String... patterns)

    pattern如果要匹配所有接口,注意"/*"和"/**"的区别:

    • "/*":匹配一级路径,如/add , /list

    • "/**":匹配多级路径,如/user/list,/manage/product/add

    因为后端接口路径一般都是多级,比如以业务前缀区分/order/xxx、/product/xxx,或者加/api/v1区分版本等,因此应使用"/**"才能正确匹配。

  • 相关阅读:
    科学开源项目 : 建立一个 新的 光衍射 模型
    光不是电磁波 摩擦力不是电磁力
    收录一篇 贝尔不等式 的 文章
    数学家 程序员 哲学家 艺术家
    论 数学 的 工具性
    数学 怎么用?
    随便说说 广义相对论 的 时间膨胀
    逻辑物理学 : 光子 有 质量 吗 ?
    我对 “光子有质量 , 引力对光子有作用” 存疑
    收录一些 高等数学 的 文章
  • 原文地址:https://www.cnblogs.com/cdfive2018/p/12586560.html
Copyright © 2020-2023  润新知