gpt4 book ai didi

java - 是否可以让 servlet 忽略某些请求?

转载 作者:搜寻专家 更新时间:2023-11-01 02:10:23 25 4
gpt4 key购买 nike

我有一个应用程序使用该功能来提供带有一些错误状态代码(例如 404)的 html 页面。但是,一些请求是诸如 restful 服务或图像之类的东西,它们应该返回由 restful 服务提供的 JSON,或者什么都不返回在图像的情况下。我使用 Tomcat 作为 servlet 容器。

需要说明的是,有几个 servlet,其中一些服务于图像,另一些服务于 html,还有一个过滤器为用户可以配置的各种路径提供 html。 404 状态通常来自缺少映射到请求路径的过滤器或 servlet。因此,错误页面功能可以方便地为没有过滤器或 servlet 的路径提供响应。

所以我在 web.xml 中的内容是(忽略/和 * 之间的空格):

... several other mappings above

<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/servlet/rest/ *</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>ErrorPageServlet</servlet-name>
<url-pattern>/servlet/errorPage/ *</url-pattern>
</servlet-mapping>

...

<filter-mapping>
<!--This will serve content and not forward to the filter chain for certain paths-->
<filter-name>MainFilter</filter-name>
<url-pattern>/ *</url-pattern>
</filter-mapping>

...

<error-page>
<!--Page not found-->
<error-code>404</error-code>
<location>/servlet/errorPage/404</location>
</error-page>

是否可以让错误页面 servlet 忽略某些请求,但在响应中为其他请求提供 html?或者我应该使用一些不同的方法来传递错误页面?

澄清一下,我想要的是,如果有人 GET/foo(不存在),它会转到 ErrorPageServlet,但是对于 GET/servlet/rest/foo/bar 返回 404 响应代码,它不会转到ErrorPageServlet。

最佳答案

我终于明白是什么问题了。 Restful 服务正在调用 HttpServletResponse.sendError() 而不是 HttpServletResponse.setStatus()。事实证明,两者之间存在巨大差异,只有 sendError() 会导致使用 servlet。

解决方法很简单,如果你想让错误页面处理输出就用sendError(),如果你想把输出写在当前的 servlet。

关于java - 是否可以让 <error-page> servlet 忽略某些请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19831923/

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