web.xml中的错误页面导致404错误。

4
在我的一个项目中,我需要处理404(资源未找到)和403(访问被拒绝)错误。我在web.xml中进行配置,如下所示:
<error-page>
        <error-code>404</error-code>
        <location>/WEB_INF/jsp/web/exception/weberror.jsp</location>
    </error-page>

    <error-page>
        <error-code>403</error-code>
        <location>/WEB_INF/jsp/web/exception/accessDenied.jsp</location>
    </error-page>
</error-page>

现在当出现访问被拒绝时,浏览器会显示本机404错误页面。我也删除了浏览器中友好错误页面的设置,但是删除后我得到了一个空白页面。

我的JSP文件位于WEB-INF文件夹中。所有JSP文件所在的路径为

/WEB_INF/jsp/

请帮助我。如果我漏掉了什么?

4个回答

9

/WEB-INF/ 下的文件受到客户端直接访问的保护,这在 Java EE规范 中有所定义。因此,您的错误页面必须位于此目录之外。尝试将它们移动到专用位置,例如 /errors/404.jsp


4

你在web.xml中使用WEB-INF而不是WEB_INF有什么区别呢?


你好Roland,非常感谢。我是个笨蛋,一直把“-”写成了“_”。在将WEB_INF替换为WEB-INF后,现在它可以工作了。现在我能够看到我的自定义的访问被拒绝和404页面了。 - vaibought

3
问题在于你使用了WEB_INF而不是WEB-INF。 所有在WEB-INF下的资源都受到客户端保护,不能直接访问,因此最好将其移出WEB-INF。 谢谢。

0

上方指出的错误在web.xml中看起来像一个cvc-complex-type.2.4.a: 在元素'location'之后找到了无效内容。

<error-page><location>/error</location></error-page>

它生成的错误是:

期望{"java.sun.com/xml/ns/javaee":error-code, "java.sun.com/xml/ns/javaee":exception-type}。

避免将特定的错误代码与错误页面映射已经从servlet 3.0规范开始,所以我通过以下更改解决了这个问题: http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd version=3.0

注意版本更改从任何版本到3.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接