java - ServletContext 何时返回空的 RequestDispatcher?

标签 java servlets

ServletContext#getRequestDispatcher() 的 API说:

This method returns null if the ServletContext cannot return a RequestDispatcher.

Returns: a RequestDispatcher object that acts as a wrapper for the resource at the specified path, or null if the ServletContext cannot return a RequestDispatcher

为什么 ServletContext 不能返回 RequestDispatcher?起初我认为如果传递了无效路径但不返回 null,则会在浏览器上导致 404。

我在调用 forward() 方法之前检查是否为 null,在日志中我偶尔会看到 RequestDispatcher 为 null,但我不知道为什么,也不知道如何复制它。

谢谢

更新

正如 Fazal 建议的那样,我尝试为“http://www.google.com/”创建一个 RequestDispatcher,看看会发生什么。这导致了 IllegalArgumentException

java.lang.IllegalArgumentException: Path http://www.google.com/ does not start with a "/" character

异常是在我的 try/catch block 中捕获的,所以我没有机会检查 RequestDispatcher 是否为 null 或调用 forward() 方法。

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

最佳答案

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

关于java - ServletContext 何时返回空的 RequestDispatcher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3815028/

相关文章:

java - 带参数的Spring编程事务

java - 用java制作我自己的 Collection 的正确方法

java - 如何在 Content-Disposition header 中设置包含空格的文件名

java Servlet 2个数字相加

java - 回文中的for循环

eclipse - 检查项目是否使用了 Java 7 中引入的代码

java - 如何将 JTable 单元格的类更改为 JCheckBox?

java - 三层架构中的表示层

java - Mongodb java 驱动程序性能低下

java - 在 servlet 中获取请求 URL