zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    正定矩阵与半正定矩阵定义与判别
    LQR (线性二次型调节器)的直观推导及简单应用
    simulink模块使用方式
    无人驾驶领域现有的主流智能车辆仿真软件具体情况介绍
    什么是在环测试
    C# Dictionary 是否包含key
    jquery.显示隐藏切换
    easyui-dialog
    Visual Studio 命令行wsdl生成C#操作类
    使用C#创建Windows服务
  • 原文地址:https://www.cnblogs.com/canger/p/7875470.html
Copyright © 2011-2022 走看看