Java 将所有404 URL映射到指定的servlet

Java 将所有404 URL映射到指定的servlet,java,servlets,Java,Servlets,我需要映射/中的所有URL,否则会得到404,这样它们就可以由特定的servlet提供服务。我该怎么做 所以/unknownUrl1和/unknownUrl2应该使用我的UnhandledUrlservlet显示,而/unknown/Somethingels应该只给出正常的404错误页面 如果这是不可能的,我的退路将是一些同样被捕获/未知/其他的东西。然后,我的servlet只需查看url,就可以决定要做什么 使用ApacheTomcat8.5 更新: 用例是我们网站上的用户需要能够选择用户名,

我需要映射/中的所有URL,否则会得到404,这样它们就可以由特定的servlet提供服务。我该怎么做

所以/unknownUrl1和/unknownUrl2应该使用我的UnhandledUrlservlet显示,而/unknown/Somethingels应该只给出正常的404错误页面

如果这是不可能的,我的退路将是一些同样被捕获/未知/其他的东西。然后,我的servlet只需查看url,就可以决定要做什么

使用ApacheTomcat8.5

更新: 用例是我们网站上的用户需要能够选择用户名,然后他们的个人页面应该可以在example.com/coolusername上访问

我试着用

  <servlet-mapping>
    <servlet-name>CatchAll</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
但这会捕获所有URL,即使在文件夹中也是如此。因此,它还捕获了example.com/folder/staticImage.jpg,这使得服务器无法提供任何静态资源


如果我能得到用户输入的真实url,使用该解决方案将非常有效。然后,我可以使用它来查找名称,查看它是否是用户名,然后将响应代码更改为200。

将以下内容添加到web.xml文件中:

<servlet>
   <servlet-name>UserServlet</servlet-name>
   <servlet-class>UserServlet</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>UserServlet</servlet-name>
   <url-pattern>/*</url-pattern>
</servlet-mapping>
您还可以将过滤器映射放在/* 与当前用户数据库匹配的内容由筛选器处理。 那些不是用户的用户只需通过chain.doFilter并以其他方式解析,例如,HTML页面或其他servlet。 这将在某种程度上颠倒用户可能优先于现有页面的优先级。
最好的解决方案可能是在/users/*上有一个servlet映射,这样您就不会用用户内容来干扰您的基本url空间。

但是如何在我的ErrorHandler中获得用户请求的真实url呢?request.getRequestURI和request.getServletPath只需给我/ErrorHandler url,而getPathInfo返回nullSee update。使用Referer不起作用。可能没有推荐人。查看您的更新,我强烈感觉这不是404机制的适当使用。您应该使用/*servlet映射。我使用了过滤器映射,它工作得非常好。非常感谢。