我有一个包含JSF和Jersey的Web应用程序:
/contextpath/rest/whatever -> Jersey
/contextpath/everythingelse -> JSF
如果JSF出现错误,即500内部服务器错误,则由web.xml中的配置显示错误页面。
...
<error-page>
<error-code>403</error-code>
<location>forbidden.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/path/to/errorhandler.jsp</location>
</error-page>
在“JSF-land”中,这样做是有效的。然而,如果Jersey资源抛出异常:
- ExceptionMapper(Jersey)处理异常并
- 发送错误响应(例如403禁止访问)
- 由于在web.xml中定义了forbidden.jsp页面,因此将提供该页面
这会产生不良的副作用,即调用forbidden.jsp并向请求application/json的客户端返回HTML。我的第一个想法是有条件地编写error-page语句,使它们只在非REST资源上才会启动,但似乎不可能实现。
其他建议?