• DispatcherServlet的url mapping为“/”时,对根路径访问的处理


    背景

    众所周知,Tomcat的Default Servlet的servlet-mapping为

    1 <servlet-mapping>
    2         <servlet-name>default</servlet-name>
    3         <url-pattern>/</url-pattern>
    4 </servlet-mapping>

    如果在基于SpringMVC的项目中做如下设置:

    • DispatcherServlet的 url-pattern同样设置为 “/”
    • 在web.xml中添加
    1     <welcome-file-list>
    2         <welcome-file>index.html</welcome-file>
    3         <welcome-file>index.jsp</welcome-file>
    4     </welcome-file-list>
    • 在后台代码中添加Controller,用于响应对应用根目录的访问,代码如下
    @Controller
    public class HomeController {
        public HomeController() {
        }
    
        @RequestMapping(value = "/",method = RequestMethod.GET)
        public String home(){
            return "home"; //home为/WEB-INF/views/home.jsp页面的逻辑名称
        }
    
        @RequestMapping(value = "/test",method = RequestMethod.GET)
        public String test(){
            return "home";
        }
    }

    那么问题如下:

    如果访问应用的根路径,是返回index.html页面,还是进入HomeController 并返回 home.jsp?

    测试结果

    1. 在DefaultServlet和DispatcherServlet同时生效的情况下:
      • 如果存在index.html页面,则返回index.html,不会进入到Controller代码中
      • 如果不存在index.html页面,则进入controller,并返回/WEB-INF/views/home.jsp页面
    2. 在DefaultServlet被注释,DispatcherServlet生效的情况下:
      • 结果同上
    3. 在DefaultServlet被注释,DispatcherServlet不配置的情况下:
      • 如果存在index.html页面,则返回index.html
      • 如果不存在index.html页面,则报错

    结果分析

    1.   默认欢迎文件的处理由Tomcat容器负责,与任何Servlet无关;
    2. 如果同时配置了处理根路径映射的Servlet和欢迎页面,则优先返回欢迎页面,请求不会到达Servlet;
    3. 如果DispatcherServlet的mapping为“/”,则DispatcherServlet会覆盖容器默认的DefaultServlet
  • 相关阅读:
    16. 3Sum Closest
    17. Letter Combinations of a Phone Number
    20. Valid Parentheses
    77. Combinations
    80. Remove Duplicates from Sorted Array II
    82. Remove Duplicates from Sorted List II
    88. Merge Sorted Array
    257. Binary Tree Paths
    225. Implement Stack using Queues
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/canger/p/7875470.html
Copyright © 2020-2023  润新知