【发布时间】:2011-04-18 10:04:11
【问题描述】:
ServletContext#getRequestDispatcher() 的 api 说:
如果 ServletContext 无法返回 RequestDispatcher,则此方法返回 null。
和
返回: 一个 RequestDispatcher 对象,它充当指定路径中资源的包装器,如果 ServletContext 无法返回 RequestDispatcher,则为 null
ServletContext 不能返回 RequestDispatcher 的原因是什么?起初我认为如果传递了无效路径但不返回 null,它会在浏览器上导致 404。
我在调用 forward() 方法之前检查 null 并且在日志中我可以看到有时 RequestDispatcher 为 null 但我不知道为什么并且我不知道如何复制它。
谢谢
更新
就像 Fazal 建议的那样,我尝试创建一个 RequestDispatcher 到“http://www.google.com/”,看看会发生什么。这导致了 IllegalArgumentException
java.lang.IllegalArgumentException:路径http://www.google.com/ 不以“/”字符开头
异常在我的 try/catch 块中被捕获,所以我从来没有机会检查 RequestDispatcher 是否为空或调用 forward() 方法。
那么 ServletContext#getRequestDispatcher() 方法必须有另一种方法来返回 null 而不会抛出异常?
【问题讨论】: