将所有404 url​​映射到特定的servlet中

时间:2018-03-19 15:45:49

标签: java servlets

我需要映射/中的所有URL,否则将给出404,以便它们由特定的servlet提供服务。我该怎么做?

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

如果这是不可能的,那些也会捕获/ unknown / somethingElse的东西将是我的后备。 (然后我的servlet将只需要查看网址,以决定要做什么

使用Apache tomcat 8.5

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

我尝试使用

  <servlet-mapping>
    <servlet-name>CatchAll</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

但即使在文件夹中也可以捕获所有网址。所以它也捕获了example.com/folder/staticImage.jpg,使得任何静态资源都无法服务。

使用该解决方案将完美地工作,只要我能得到用户输入的真实网址。然后,我可以使用它来查找名称以查看它是否是用户名,然后将响应代码更改为200.

2 个答案:

答案 0 :(得分:0)

将以下内容添加到您的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>

答案 1 :(得分:0)

您还可以在filter-mapping上加/* 与您当前用户数据库匹配的那些由过滤器处理。 非用户的那些只是通过chain.doFilter()传递并以其他方式解析,例如,HTML页面或不同的servlet。 这将在某种程度上颠倒用户可能优先于现有页面的优先级。 最好的解决方案可能是在servlet-mapping上设置/users/*,因此您不会使用用户内容来管理您的基本网址空间。