java上下文根、虚拟路径到实际文件路径的映射,以及Servlet中前导斜杠的含义
在阅读了大量其他SO答案和一些在线文章之后,我试图总结一下上下文根、虚拟路径到实际文件路径映射的概念,以及前导斜杠的含义
基于servlet规范的Context root对应于URI
http://host:port/<context-root>/
。一旦部署了web应用程序,这个上下文根目录总是映射到实际文件系统中web应用程序的基本目录(例如,分解的war),它总是web-INF文件夹的父目录每当我们在web应用程序(例如web.xml、servlet、过滤器)中使用前导斜杠“/”时,前导斜杠总是指向上下文根,而不是绝对根
http://host:port/
所以无论什么时候request.getRequestDispatcher("/foo/bar/baz.jsp").forward(...)
从servlet容器的角度来看,我们需要一个位于
http://host:port/<context-path>/foo/bar/baz.jsp
,它映射到以下路径 在文件系统中file:///<$CATALINA_HOME>/webapps/our-application/foo/bar/baz.jsp
每次我们在仅对客户端(即浏览器)有意义的上下文中使用前导斜杠“/”时,前导斜杠总是指向绝对根
http://host:port/
。我能想到的例子是JSP文件中html元素的src
和href
属性,或者HttpServletResponse#sendRedirect
中的重定向URL,或者cookie中的路径Cookie#setPath
编辑:如果不够清楚,请道歉:我正在寻找一个人来纠正我的理解,如果其中任何一个不正确或遗漏了什么
共 (0) 个答案