扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这期内容当中小编将会给大家带来有关WelcomeFile实现分析是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
创新互联长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为龙胜企业提供专业的网站设计、做网站,龙胜网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
在Web应用中,我们经常会发送类似如下格式的请求:
host:port/context/dir/
当然,上面到dir这一层的有时候会带,有时候则是直接请求根应用。这个时候,应用服务器就需要判断对应的请求以哪种形式 进行展现,例如对于一个目录的请求,这个时候,如果目录下包含特定的某个页面,那这个时候可能是要请求页面,也可能是 想进行目录的list操作。
这个时候,就需要用到Web应用中的 Welcome File
关于 Welcome File , Servlet规范中指明,它是在web描述文件中指定部分请求路径的一个有序的列表。主要用于 在请求指向一个directory entry
,且没和任何的Web组件有关联的时候,进行append,从而决定具体请求的地址。
例如我们上面的请求形式,如果此时dir并没有对应到任何一个Servlet或Jsp上,此时有类似index.html这种welcomeFile的配置, 就会帮助请求进行定向。
如果上面的请求没有对应到的WelcomeFile,此时会根据应用服务器的配置,进行请求目录的列表(如果该操作是设为允许的话,可以查看之前关于List的文章Tomcat是如何响应静态资源的?),或者直接 返回404.
在应用中配置WelcomeFile也很简单,只需要在web.xml中直接指定即可,格式如下,来自规范中的描述:
假设我们在应用中指定了如下形式的welcomeFile
index.html default.jsp
如果应用目录结构包含如下dir /test/index.html /test/a.jsp /hello/x.jsp /hello/default.jsp
此时,我们请求到应用的test目录时,就会被指向index.html。请求hello会被指向default.jsp
再来看下,在Tomcat中对应WelcomeFile的实现方式。
我们在web.xml这个描述文件中配置的内容,都会在应用部署时进行解析,配置应用。welcome-file-list也不例外。 在应用内指定的会是第一优先级。应用中没有显式的指定,就会使用应用服务器默认提供的conf/web.xml中的配置。
web.xml中的配置,会被保存到一个Set中
在部署的时候,添加到StandardContext中
后续,在接收到请求的时候,就需要判断具体的请求路径和welcomeFile的配置。
我们前面的文章里写过几次请求,也写过虚拟主机
如何不配置应用名访问应用?
Facade模式与请求处理
Tomcat多虚拟主机配置及原理
这其中都提到了一个叫Mapper的组件。人如其名,它就是为我们做指引的。在请求过程中,基本是按照这样一个流程:
EndPoint -> Processor -> CoyoteAdapter -> Mapper-> Pipeline -> Valve ...
这里Mapper在我们前面的文章中写过,会根据已经注册的虚拟主机,应用进行请求判断。对于本次文章提到的welcome,则是在判断后的流程中处理
判断中按照不同的匹配规则从前到后进行:
Exact Match
Prefix Match
Extension Match
Welcome resources processing for servlets
Welcome resources processing for exact macth
Welcome resources processing for prefix match
Welcome resources processing for physical folder
Default servlet
以上我逻辑,基本都是根据请求的路径,进行不同的match,比较重要的一点是这里:
如我们前面提到的,会在使用welcomeFile进行请求判断的时候,把它append到当前请求路径之后进行。
上述就是小编为大家分享的WelcomeFile实现分析是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流