The Servlet
3.5 请求路径元素(Request Path Elements)
指向服务请求的servlet的请求路径由许多重要部分组成。下面的元素从请求的URI路基获取并且通过请求对象提取:
- Context Path :与此servlet所属的ServletContext关联的路径前缀。如果此上 下文是“默认”上下文,则根位于Web服务器的URL名称空间,此路径将为空字符串。否则,如果上下文不是在服务器名称空间的根目录,则路径以/字符开头,但不以/字符结尾。
- Servlet Path :路径直接对应于处理此请求的映射的路径部分。此路径以’ / ‘字符开始,除非请求与’ /* '或" "模式匹配,在这种情况下,它是一个空字符串。
- PathInfo : 请求路径中不属于上下文路径或Servlet路径的部分。如果没有额外的路径,值就是null;否则就是以“/”开头的字符串。
HttpServletRequest接口中存在以下方法来访问此信息:
- getContextPath
- getServletPath
- getPathInfo
需要注意的是,在请求URI和路径部分之间,除了URL编码的方式不同,下面的等式应当总是成立:
requestURI = contextPath + servletPath + patnInfo
下面给出一些例子:
3.6 路径转换方法
API中有两个方便的方法,允许开发人员获得与特定路径等价的文件系统路径。这些方法有:
- ServletContext.getRealPath
- HttpServletRequest.getPathTranslated
getRealPath方法接受一个字符串参数,并返回路径所对应的本地文件系统中文件的字符串表示形式。getpathtranslate方法计算请求的实际路径。在servlet容器无法确定这些方法的有效文件路径的情况下,例如从存档中执行Web应用程序时,在本地不可访问的远程文件系统上,或者在数据库中,这些方法会返回null。只有当容器在调用getRealPath()时从其包含的JAR文件中解压缩了资源时,才必须考虑JAR文件的META-INF/ Resources目录中的资源,在这种情况下,必须返回解压缩的位置。