ServletContext何时返回null RequestDispatcher?

ServletContext#getRequestDispatcher()的api说:

如果ServletContext无法返回RequestDispatcher,则此方法返回null。

返回:RequestDispatcher对象,充当指定路径上资源的包装,如果ServletContext无法返回RequestDispatcher,则返回null

出于什么原因,ServletContext无法返回RequestDispatcher? 起初我认为如果传递了无效路径但是没有返回null,则会在浏览器上产生404。

我在调用forward()方法之前检查null,在日志中我可以看到,曾经有一段时间RequestDispatcher为null,但我不知道为什么,我无法找到如何复制它。

谢谢

更新

就像Fazal建议我尝试在’http://www.google.com/’上创建一个RequestDispatcher来查看会发生什么。 这导致了IllegalArgumentException

java.lang.IllegalArgumentException:路径http://www.google.com/不以“/”字符开头

在我的try / catch块中捕获了exception,因此我没有机会检查RequestDispatcher是否为null或调用forward()方法。

那么ServletContext#getRequestDispatcher()方法必须有另一种方法返回null而不抛出exception?

Tomcat为当前上下文之外的路径返回null ,例如/../foo (但Jetty没有,因此它是特定于实现的)。

我间歇地看到了这个问题。 但对我来说,这只会发生,如果你试图找到一个不在文档根目录中的有效补丁。 例如,您的服务器在http:// localhost /上运行,我转发到http://www.google.com等 URL。 不确定您是否遇到此问题