gpt4 book ai didi

java - ServletRequest.getRequestDispatcher() 用于不存在的文件/资源

转载 作者:行者123 更新时间:2023-11-30 09:25:43 24 4
gpt4 key购买 nike

目前我正在准备 Java EE Web Component Developer 考试。

在考试学习指南和 Servlet API Java 文档中我都找到了那个方法

ServletRequest.getRequestDispatcher()

返回

null if the servlet container cannot return a RequestDispatcher.

当我尝试使用不存在的静态文件时,我实际上得到了非空值。转发导致 404 发送给客户端。对于不存在的 servlet 也有同样的效果。我使用 Apache Tomcat 7.0。

这是否意味着此行为未定义并留给实现者选择?他们(Java 文档作者)所说的“servlet 容器无法返回 RequestDispatcher”是什么意思?我试图在 JSR 规范中寻找它,但找不到答案。

最佳答案

这是 Servlet 3.0 规范对调度程序行为的规定:

The getRequestDispatcher method takes a String argument describing a path within the scope of the ServletContext. This path must be relative to the root of the ServletContext and begin with a ‘/’, or be empty. The method uses the path to look up a servlet, using the servlet path matching rules in Chapter 12, “Mapping Requests to Servlets”, wraps it with a RequestDispatcher object, and returns the resulting object. If no servlet can be resolved based on the given path, a RequestDispatcher is provided that returns the content for that path.

它没有提到如果无法为调度路径找到匹配的 servlet 则返回 null。相反,它声明将找到在调度路径中找到的“内容”,我将其翻译为意味着实现可以简单地允许容器绝对解析路径(在您的场景中会产生 404) .

不过就 Javadoc 而言,它似乎记录了尽可能广泛的用例,也就是说,如果容器由于任何原因无法创建调度程序,那么它将返回一个空对象(而不是抛出异常)。这可能是由于实现中的技术问题,或者可能实际上是有效的(例如,JAX-RS 实现可以访问某些级别的 Servlet 基础结构,但不能使用 servlet 上下文或调度程序)。

关于java - ServletRequest.getRequestDispatcher() 用于不存在的文件/资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com