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的更多相关文章
- javaweb项目springmvc,和tomcat对静态文件的处理
1.激活Tomcat的defaultServlet来处理静态文件,web.xml配置 <servlet-mapping> <servlet-name>default</s ...
- Web容器中DefaultServlet详解 JspServlet DefaultServlet
Web容器中DefaultServlet详解 https://blog.csdn.net/qq_30920821/article/details/78328608 Web容器中DefaultServl ...
- Web容器中DefaultServlet详解
万分感谢原文作者:_licho 原文链接:https://blog.csdn.net/qq_30920821/article/details/78328608 Web容器中DefaultServlet ...
- SpringMVC_简单小结
SpringMVC是一个简单的.优秀的框架.应了那句话简单就是美,而且他强大不失灵活,性能也很优秀. 机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,fi ...
- SpringMVC入门
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模 ...
- SpringMVC初步
SpringMVC框架介绍 1) Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. Spring 框架提供了构建 Web 应用程序的全功 ...
- Spring MVC入门
1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...
- spring mvc 和spring security配置 web.xml设置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...
- 初见SpringMVC
1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...
随机推荐
- Machine Learning Library (MLlib) Guide, BOOKS
download.microsoft.com/download/0/9/6/096170E9-23A2.../9780735698178.pdf Microsoft Azure Essential ...
- OpenStack大规模部署详解
https://blog.csdn.net/karamos/article/details/80130443 0.前言今年的2月22日,OpenStack发布了15个版本Ocata. 走过了7年的发展 ...
- 深入云存储系统Swift核心组件:Ring实现原理剖析
http://www.cnblogs.com/yuxc/archive/2012/06/22/2558312.html 简介 OpenStack是一个美国国家航空航天局和Rackspace合作研发的开 ...
- Swift中Notification.Name这么难用怎么办
Swift中Notification.Name这么难用怎么办 以前的发送通知的参数就是一个简单的字符串: NSNotificationCenter.defaultCenter().post(" ...
- python2/3 中删除字典中value为空的键值对方法
python2 data_info = { 'account': 1, 'remark': 2, 'sort': '', 'weight': '', } for key in data_info.ke ...
- Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)【转】
[转自:]http://blog.csdn.net/hitwengqi/article/details/8008203 最近一直在自学Hadoop,今天花点时间搭建一个开发环境,并整理成文. 首先要了 ...
- Docker 镜像操作
列出镜像列表 我们可以使用 docker images 来列出本地主机上的镜像. runoob@runoob:~$ docker images REPOSITORY TAG IMAGE ID CREA ...
- mybatis中mapUnderscoreToCamelCase自动驼峰命名转换
ssm项目中在mybatis配置文件中添加以下配置,可以将数据库中user_name转化成userName与实体类属性对应,如果数据库使用如user_name的命名方式,实体类采用驼峰命名.配置后无需 ...
- corntab被黑记录
多出来的corntab 最近服务器经常出现负载过高的情况,经过运维排查,出现了一个corntab定时任务 不是开发的锅,别背 一开始运维认为是这个定时任务是我们开发的. 排查后,明确了服务器是被黑了. ...
- Swift 编程思想 阅读笔记
Swift 编程思想,第一部分:拯救小马html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeM ...