问题描述:

群里有人测试 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. 时钟极性和时钟相位概念
  2. linux内核dma内存分配,Linux 4.x 内核空间 DMA 虚拟内存地址
  3. MYSQL1130错误的解决方案
  4. asp.net 获取 当前日期时间 及 前后N天日期时间(DropDownList数据绑定)
  5. java安装版本哪种好_我怎么知道我安装了哪个版本的Java?
  6. ASP.NET Session详解
  7. jvm类加载机制是怎么样的
  8. Gulp新手入门教程
  9. CentOS FireFox Flash Player
  10. 阿里云技术天团空降 CSDN 独家在线峰会,揭秘核心竞争力
  11. poi 升级至4.x 的问题总结(POI Excel 单元格内容类型判断并取值)
  12. w10 桌面计算机垃圾桶,解答win10我的电脑怎么放在桌面
  13. 校园表白墙、微信表白墙、大学生树洞,交流圈子,用Fotoo创建
  14. 知识图谱从入门到应用——知识图谱的知识表示:向量表示方法
  15. width 与 height
  16. 资格考试_第四章_证券投资基金的监督
  17. 作为Java开发程序员,中科创达java应届生薪资
  18. 解密翻译:爱的摩斯密码
  19. 吐血整理!万字原创读书笔记,数据分析的知识点全在这里了
  20. 面试了近60个公司,我听懂了这些“潜台词”

热门文章

  1. softmax理论及代码解读——UFLDL
  2. hdu-6165(tarjan+topusort)
  3. Java并发学习之一——线程的创建
  4. HDU 1028 Ignatius and the Princess III
  5. cocos2dx游戏--欢欢英雄传说--添加攻击按钮
  6. GooglePR说明
  7. 利用@media screen实现网页布局的自适应
  8. vue-resource全攻略
  9. 一些杂七杂八的前端知识1
  10. Angular 路由守卫