@
abcbuzhiming 早期 jsp 引擎的实现和 php 是比较类似的,就是类似 *.jsp/* 都会被 jsp 引擎处理,只要路径中包含 jsp (并且文件存在),就会被映射
但是会存在歧义
比如 /1.jsp/2.jsp/3 并且这两个路径下的 jsp 文件都存在
那应该是映射为 servletPath=/1.jsp, pathInfo=/2.jsp/3 呢
还是 servletPath=/1.jsp/2.jsp, path=/3
完全依赖引擎的实现, Servlet 规范里面并没有这种定义的支持.
Servlet 规范的 mapping 只支持一个 *,即要么按文件名后缀 map ( pathInfo 永远是 null) 要么按前缀来 map, 而且必须是 ‘/*’ (/* 代表的就是 pathInfo)
默认的 jsp servlet mapping 的定义是写在 CATALINA_BASE/web.xml 里面, 就是 *.jsp, 通过这个 mapping 的请求也一定没有 path info
默认配置还有一个 DefaultServlet, 用来服务静态文件
至于 tomcat 的 jsp 引擎什么时候变更为和规范一致,我已经不记得了,只记得很早的时候是可以 (带 path) 的,后来就不可以了,也很可能是 tomcat 一直都默认不可以带 path 而是其它引擎( resin / jetty 之类的) 可以
搜了一下也只能找到这个帖子
http://tomcat.10.x6.nabble.com/troubleshooting-getPathInfo-in-jsp-files-td2158648.html最后,无论是哪个语言的 HTTP 服务引擎, 所面对的概念都没有什么太大差别, 基本上都遵循 CGI 的定义,你看 javadoc 的时候没看到 request.getXXX 的说明很多都有说明是相当于 CGI 的哪个环境变量吗?