Tomcat 的 DefaultServlet
问题描述:
群里有人测试 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相关推荐
- Tomcat架构解析之DefaultServlet和JspServlet
一.前言 Tomcat在$ CATALINA_BASE/conf/web.xml中默认定义了两个Servlet:DefaultServlet和JspServlet,而且由于$ CATALINA_BAS ...
- SpringMVC权限管理
2019独角兽企业重金招聘Python工程师标准>>> 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过D ...
- spring mvc 总结
为什么80%的码农都做不了架构师?>>> 一.前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 ...
- Spring MVC学习-------------訪问到静态的文件
怎样訪问到静态的文件,如jpg,js,css? 怎样你的DispatcherServlet拦截"*.do"这种有后缀的URL.就不存在訪问不到静态资源的问题. 假设你的Dispat ...
- Spring MVC 拦截器
1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet. DispatcherServl ...
- Spring3 MVC
一.前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring3 MVC结构简单,应了那句话简单就是美,而 ...
- springmvc如何访问静态文件,例如jpg,js,css
你怎么DispatcherServlet拦截"*.do"这有一个后缀URL.就不存在訪问不到静态资源的问题. 假设你的DispatcherServlet拦截"/&qu ...
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决...
最近项目中使用到Spring3,在感叹Spring3注解配置清爽的同时竟然出现了这个不和谐的事情,实在无法忍受 问 题:部署项目后程序加载或用浏览器访问时出现类似的警告,2011-01-19 10:5 ...
- SpringMVC拦截器2(资源和权限管理)(作为补充说明)
SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServle ...
最新文章
- 时钟极性和时钟相位概念
- linux内核dma内存分配,Linux 4.x 内核空间 DMA 虚拟内存地址
- MYSQL1130错误的解决方案
- asp.net 获取 当前日期时间 及 前后N天日期时间(DropDownList数据绑定)
- java安装版本哪种好_我怎么知道我安装了哪个版本的Java?
- ASP.NET Session详解
- jvm类加载机制是怎么样的
- Gulp新手入门教程
- CentOS FireFox Flash Player
- 阿里云技术天团空降 CSDN 独家在线峰会,揭秘核心竞争力
- poi 升级至4.x 的问题总结(POI Excel 单元格内容类型判断并取值)
- w10 桌面计算机垃圾桶,解答win10我的电脑怎么放在桌面
- 校园表白墙、微信表白墙、大学生树洞,交流圈子,用Fotoo创建
- 知识图谱从入门到应用——知识图谱的知识表示:向量表示方法
- width 与 height
- 资格考试_第四章_证券投资基金的监督
- 作为Java开发程序员,中科创达java应届生薪资
- 解密翻译:爱的摩斯密码
- 吐血整理!万字原创读书笔记,数据分析的知识点全在这里了
- 面试了近60个公司,我听懂了这些“潜台词”