我需要实现3个servlet,模式重叠。
第一个 servlet将处理例如:
/context/categories
有这样的模式:
@WebServlet("/categories"))
第二个 servlet将处理例如:
/context/categories/category1/
有这样的模式:
@WebServlet("/categories/*")
第三个就像:
/context/categories/category1/category1contentname
但是我不能给第三个正确的模式,因为第二个servlet会接听电话,或者两个都没有。 我的问题是,我如何给servlet提供正确的模式,特别是第二和第三? 我知道/ *后缀和*。前缀,但到目前为止似乎无法正常工作。
答案 0 :(得分:1)
我将假设
/context/categories/category1/
您的意思是/category1
路径段可以包含任何值。
基本上,您不能使用Servlet url-pattern
元素。 Servlet Specification说明了以下关于路径匹配的内容:
用于映射到servlet的路径是来自的请求URL 请求对象减去上下文路径和路径参数。该 下面的URL路径映射规则按顺序使用。第一次成功 匹配用于未尝试进一步匹配:
- 容器将尝试查找请求路径与servlet路径的完全匹配。成功的比赛选择 的servlet。
- 容器将递归尝试匹配最长的路径前缀。这是通过使用'/'字符作为路径分隔符一次单击目录的路径树来完成的。最长的 match确定所选的servlet。
- [...]
- [...]
醇>
映射
@WebServlet("/categories/*")
将匹配以/categories
开头的所有内容。
在我看来,你没有很多解决方案。使用模式Servlet
声明单个/categories/*
并在内部执行一些调度。您应该查看Front Controller pattern。