如何在web.xml中指定“未找到”错误页面,以便更改URL?

时间:2017-02-21 14:16:49

标签: java html servlets server

如果我指定这样的错误页面:

<error-page>
    <error-code>404</error-code>
    <location>/pages/not-found.html</location>
</error-page>

并点击网址localhost:8080/app/something/else(返回404错误),然后浏览器上的网址仍为localhost:8080/app/something/else,而错误网页的内容会转储到浏览器上。这里的问题是,如果我指定任何这样的css资源:

<link type="text/css" rel="stylesheet" href="resources/css/bootstrap.css" />

然后,浏览器尝试加载localhost:8080/app/something/else/resources/css/bootstrap.css而不是localhost:8080/app/resources/css/bootstrap.css,这显然会失败。我们也不能使用

<link type="text/css" rel="stylesheet" href="/resources/css/bootstrap.css" />

然后浏览器将加载localhost:8080/resources/css/bootstrap.css

基本问题是相对路径取决于URL中的斜杠数。

在我看来,如果我可以 页面重定向到/pages/not-found.html,那么我可以指定css文件的一致路径(不用担心URL中的斜杠数量

2 个答案:

答案 0 :(得分:0)

如果您正在谈论 JSF-Application ,也许您可​​以使用phaselistener:

在phaselistener中,您可以让JSF完成其工作并捕获java.io.FileNotFoundException。如果发生异常您可以将用户转发到特殊站点:

 FacesContext context = event.getFacesContext();
 context.getExternalContext().redirect("/pages/not-found.html");

答案 1 :(得分:0)

你应该使用它 用于CSS文件

<h:outputStylesheet library="css" name="bootstrap.css"/>

和javascript文件

<h:outputScript library="js" name="bootstrap.js"/>

或者如果您想使用

<link type="text/css" rel="stylesheet" href="#{request.contextPath}/resources/css/bootstrap.css" />

但最好首先使用它