4

我想在 Tomcat 中保存转到 404 not found 页面的 URL 或 URI。更清楚的是,我自定义我的应用程序以在找不到输入的页面时转到,当我输入未找到/home.xhtml的页面时,tomcat 重定向到home.xhml,这很好,但我仍然想要使这种情况发生的 URL,就像用户这样做:www .myapp.com/anotfoundpage,我希望 Tomcat 重定向到home.xhml 并且我想获取 URL:www.myapp.com/anotfoundpage。

任何 Tomcat 类中是否有任何属性可用于获取该 URL?

4

3 回答 3

5

明白了,经过一番研究,我明白我们需要使用request.getAttribut("javax.servlet.error.request_uri"),这个方法返回的 url 导致 404 错误。

所以我需要做的就是,声明一个servlet,例如:NotFoundHandler,并将这个类映射为一个url-pattern:NotFound,然后将其指定为tomcat 404错误:

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

然后在我的 servlet 中,我只使用 request.getAttribut("javax.servlet.error.request_uri")。

于 2013-06-12T23:23:50.400 回答
0

有很多方法可以做到这一点,具体取决于您用于开发应用程序的框架。假设您只使用普通 servlet,您可以使用 servlet 过滤器或 servlet 来处理应用程序的所有无效路径,然后使用方法request.getRequestURI()找出用户输入的路径。

例如,你可以有这样的东西:

<web-app>
        <servlet>
             <servlet-name>MyRealServletOne</servlet-name>
             <servlet-path>foo.Servlet1</servlet-path>
        </servlet>
        <servlet-mapping>
             <servlet-name>MyRealServletOne</servlet-name>
             <url-pattern>/realPath</url-pattern>
        </servlet-mapping>

        <servlet>
             <servlet-name>InvalidPaths</servlet-name>
             <servlet-path>foo.InvalidServlet</servlet-path>
        </servlet>
        <servlet-mapping>
             <servlet-name>InvalidPaths</servlet-name>
             <url-pattern>/*</url-pattern>
        </servlet-mapping>    
</web-app>

因此,将您的 404 请求代码放入foo.InvalidServlet并确保向用户显示 404 错误。

希望有帮助。

于 2013-06-12T04:10:03.470 回答
-1

我使用以下。它在我的 WEB-INF/web.xml 文件中,是元素的子<web-app>元素。

如果您想将 404 定向到 servlet 或其他地方,您可以通过修改<location>元素中的值来实现。

<!-- Catch 404 errors -->
<error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
</error-page>

这不需要更改 Tomcat 配置,只需更改您的部署描述符 (web.xml)。

于 2013-06-11T21:34:15.537 回答