具有重叠模式的Servlet

时间:2014-04-07 09:16:10

标签: java servlets

我需要实现3个servlet,模式重叠。

第一个 servlet将处理例如:

/context/categories

有这样的模式:

@WebServlet("/categories"))

第二个 servlet将处理例如:

/context/categories/category1/

有这样的模式:

@WebServlet("/categories/*")

第三个就像:

/context/categories/category1/category1contentname

但是我不能给第三个正确的模式,因为第二个servlet会接听电话,或者两个都没有。 我的问题是,我如何给servlet提供正确的模式,特别是第二和第三? 我知道/ *后缀和*。前缀,但到目前为止似乎无法正常工作。

1 个答案:

答案 0 :(得分:1)

我将假设

/context/categories/category1/

您的意思是/category1路径段可以包含任何值。

基本上,您不能使用Servlet url-pattern元素。 Servlet Specification说明了以下关于路径匹配的内容:

  

用于映射到servlet的路径是来自的请求URL   请求对象减去上下文路径和路径参数。该   下面的URL路径映射规则按顺序使用。第一次成功   匹配用于未尝试进一步匹配:

     
      
  1. 容器将尝试查找请求路径与servlet路径的完全匹配。成功的比赛选择   的servlet。
  2.   
  3. 容器将递归尝试匹配最长的路径前缀。这是通过使用'/'字符作为路径分隔符一次单击目录的路径树来完成的。最长的   match确定所选的servlet。
  4.   
  5. [...]
  6.   
  7. [...]
  8.   

映射

@WebServlet("/categories/*")

将匹配以/categories开头的所有内容。

在我看来,你没有很多解决方案。使用模式Servlet声明单个/categories/*并在内部执行一些调度。您应该查看Front Controller pattern