我需要映射/中的所有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.
答案 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/*
,因此您不会使用用户内容来管理您的基本网址空间。