问题描述:

群里有人测试 Spring MVC,没有配置任何Controller,只配置了一个view resolver,指定了前缀后缀。

然后,他问的是 当访问 localhost:8080/test 的时候,为什么会被重定向到 localhost:8080/test/ ?

由于是在Spring Boot群里问的,我想当然的认为 /test对应着Controller,于是百思不得其解。后来才知道不是Spring Boot项目,而是自己新建的一个maven项目,/test 对应着项目名称。

直觉告诉我,这肯定是Tomcat的默认行为,因为项目名称对应着文件夹,而 当访问一个文件夹的时候,默认会查找其中的 index.html 等index文件,重定向完全讲得通。

于是查找 tomcat(7.0.52)下面的配置文件,在 conf/web.xml 的末尾发现了这样的内容:

<!-- ==================== Default Welcome File List ===================== --><!-- When a request URI refers to a directory, the default servlet looks  --><!-- for a "welcome file" within that directory and, if present, to the   --><!-- corresponding resource URI for display.                              --><!-- If no welcome files are present, the default servlet either serves a --><!-- directory listing (see default servlet configuration on how to       --><!-- customize) or returns a 404 status, depending on the value of the    --><!-- listings setting.                                                    --><!--                                                                      --><!-- If you define welcome files in your own application's web.xml        --><!-- deployment descriptor, that list *replaces* the list configured      --><!-- here, so be sure to include any of the default values that you wish  --><!-- to use within your application.                                       --><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list>

这里说的就是:当一个请求URI对应一个目录时,default servlet会查找该目录下的欢迎文件;如果存在,则返回资源;如果不存在,那default servlet 要么返回目录列表(需要配置,默认不支持),要么返回 404 状态码。

但这里只是描述结果,并没有原理性的东西,想要知道原理 只能去查源代码。

根据上面的内容可以知道Tomcat 有一个default servlet,那我直接使用DefaultServlet查找相应的java文件(在IDEA中新建一个Spring Boot项目,再双击 Shift,输入DefaultServlet即可),果然找到了。

嗯嗯,这里的Tomcat 是8.5.x,Spring Boot 默认的版本,但DefaultServlet的原理一致。

Tomcat 的 DefaultServlet相关推荐

  1. Tomcat架构解析之DefaultServlet和JspServlet

    一.前言 Tomcat在$ CATALINA_BASE/conf/web.xml中默认定义了两个Servlet:DefaultServlet和JspServlet,而且由于$ CATALINA_BAS ...

  2. SpringMVC权限管理

    2019独角兽企业重金招聘Python工程师标准>>> 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过D ...

  3. spring mvc 总结

    为什么80%的码农都做不了架构师?>>>    一.前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 ...

  4. Spring MVC学习-------------訪问到静态的文件

    怎样訪问到静态的文件,如jpg,js,css? 怎样你的DispatcherServlet拦截"*.do"这种有后缀的URL.就不存在訪问不到静态资源的问题. 假设你的Dispat ...

  5. Spring MVC 拦截器

    1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet.     DispatcherServl ...

  6. Spring3 MVC

    一.前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring3 MVC结构简单,应了那句话简单就是美,而 ...

  7. springmvc如何访问静态文件,例如jpg,js,css

    你怎么DispatcherServlet拦截"*.do"这有一个后缀URL.就不存在訪问不到静态资源的问题.   假设你的DispatcherServlet拦截"/&qu ...

  8. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决...

    最近项目中使用到Spring3,在感叹Spring3注解配置清爽的同时竟然出现了这个不和谐的事情,实在无法忍受 问 题:部署项目后程序加载或用浏览器访问时出现类似的警告,2011-01-19 10:5 ...

  9. SpringMVC拦截器2(资源和权限管理)(作为补充说明)

    SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServle ...

最新文章

  1. listview条目用状态选择器没反应
  2. C# 读取保存App.config配置文件的完整源码参考
  3. 附pdf下载 | 入门Python和深度学习的经典书
  4. 关于idea右侧的maven project 如何调出来
  5. VS2010编译驱动程序
  6. Solr安装及集成javaWeb
  7. 系统表空间数据文件损坏
  8. linux使用vim同时打开文件,VIM 在同一个窗口中同时编辑多个文件
  9. # 20145205 《Java程序设计》第1周学习总结
  10. Atitit.每周末总结 于每周一计划日程表 流程表 v8 -------------import 上周遗漏日志补充 检查话费 检查流量情况 Crm问候 Crm表total and 问候
  11. Linux命令总结大全,包含所有linux命令
  12. 微信编辑器的文章复制到公众号以后乱码怎么解决?
  13. 人工智能能写剧本了 还被拍成了9分钟的短片
  14. 4.29 笔记+day7作业
  15. PS CS6增加导出ICO图标文件(ICOFormat64.8bi)64位系统
  16. 携程、同程、QQ音乐、天猫...等14款APP被点名:涉嫌过度收集用户信息
  17. csp-j 2022 比赛心得
  18. excle2010 一张图上画两种类型的图:折线图+柱形图
  19. openlayers3中geowebcache的使用
  20. java2.0qq同步_qq同步助手2.0 apk下载

热门文章

  1. GameObject数组逐渐消失
  2. python图片转文字_【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码...
  3. 金蝶k3单据编码规则_金蝶K3存货跌价案例教程
  4. Ubuntu16.04用源安装Nginx+PHP5.6+MySQL5.6
  5. python的异常处理
  6. 也说翟鸿燊忽悠的一面
  7. fastclick库的介绍和使用
  8. sticky-footer实现记录
  9. Git图形化管理工具
  10. 201671010456-张琼 实验十四 团队项目评审课程学习总结