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

it2022-05-05  78

背景

众所周知,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?

测试结果

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

结果分析

  默认欢迎文件的处理由Tomcat容器负责,与任何Servlet无关;如果同时配置了处理根路径映射的Servlet和欢迎页面,则优先返回欢迎页面,请求不会到达Servlet;如果DispatcherServlet的mapping为“/”,则DispatcherServlet会覆盖容器默认的DefaultServlet

转载于:https://www.cnblogs.com/canger/p/7875470.html


最新回复(0)