java - 在 Wicket 中使用可添加书签的页面的 Tomcat 错误页面

标签 java tomcat wicket web.xml

我有这样的问题。

当收到 404 HTTP 错误时,我需要显示自定义错误页面。我正在使用 Wicket 1.4 和 Tomcat6。我已经在 web.xml 中实现了这些东西,比如

 <filter-name>wicket.filter</filter-name>
    <url-pattern>/*</url-pattern>         
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
 </filter-mapping>

<error-page>
    <error-code>404</error-code>
    <location>/404</location>
</error-page>

并在我的 WebApplication 中放置这样的代码:

mount(new HybridUrlCodingStrategy("/404", PageNotFound.class));

PageNotFound 类 isErrorPage 设置为 true,isVersioned 为 false 并且

    @Override
    protected void configureResponse() {
       super.configureResponse();   
       getWebRequestCycle().getWebResponse().getHttpServletResponse().setStatus(HttpServletResponse.SC_NOT_FOUND);
    }

现在的问题是,当我输入一些无效的 url,比如 http://localhost:8080/myApp-war/invalidUrl ,我可以看到我的 PageNotFound。 但是当我输入类似 http://localhost:8080/myApp-war/?wicket:bookmarkablePage=:com.mypackage.invalidUrl 的内容时,然后我就得到没有任何数据的空页面。

我注意到,在第一种情况下,tomcat 只显示“HTTP Status 404 -/myApp-war/invalidUrl” 在另一种情况下,它显示略有不同的消息:“HTTP 状态 404 - 无法加载可 Collection 的页面

如何让两种情况显示相同的页面?也许这个<error-page>标签需要修改?如果您需要,我会为您提供更多信息。

最佳答案

您的代码和您的期望是完美的。这只是 Wicket 错误或 Tomcat 对 404 异常的错误理解。我猜它只是在 1.4.x 版本之前的 Wicket 中。

解决方法是重写AbstractRequestCycleProcessor中的代码,您可以在 WebApplication 类的工厂方法中重写它:

@Override

protected IRequestCycleProcessor newRequestCycleProcessor() {

return new WebRequestCycleProcessor() {

    @Override
    protected IRequestTarget resolveBookmarkablePage(final RequestCycle requestCycle,
            final RequestParameters requestParameters) {
        IRequestTarget target = super.resolveBookmarkablePage(requestCycle, requestParameters);
        if(target == null) {
            return target;
        }
        if(target instanceof WebErrorCodeResponseTarget) {
            WebErrorCodeResponseTarget errorResponse = (WebErrorCodeResponseTarget) target;
            if(HttpServletResponse.SC_NOT_FOUND == errorResponse.getErrorCode()) {
                return null;
            }
        }
        return target;
    }

};

我将完整的工作示例放入我的 Wicket14 测试存储库 https://repo.twinstone.org/projects/WISTF/repos/wicket-examples-1.4/browse

关于java - 在 Wicket 中使用可添加书签的页面的 Tomcat 错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21309121/

相关文章:

java - 从内部类引用的局部变量必须是 final 或有效的 final

java - 如何配置 JMX over SSL 使用的 TLS 版本?

java - tomcat无法在ubuntu中加载我的webapp

java - 你能让一个 TextField<BigDecimal> 同时接受 , 和 .作为小数分隔符?

java - 如何在 Wicket 中启动文件下载并关闭 (jQuery) 对话框?

java - 如何在 Java 中比较字符串?

java - JaxB 解码错误 : java. lang.RuntimeException : unexpected element (uri :"", 本地 :"code")。预期的元素是 <{}section>

java - 尝试在 Tomcat 8 下运行 RSA SDK

Java Jersey 找不到资源

java - Wicket 组件层次结构 - getParent()