gpt4 book ai didi

java - 具有重叠模式的 Servlet

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:41 24 4
gpt4 key购买 nike

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

第一个 servlet 将处理例如:

/context/categories

具有这样的模式:

@WebServlet("/categories"))

第二个 servlet 将处理例如:

/context/categories/category1/

具有这样的模式:

@WebServlet("/categories/*")

第三个就像:

/context/categories/category1/category1contentname

但我无法为第三个提供正确的模式,因为第二个 servlet 会捕获该调用,或者两者都不会。我的问题是,如何为 servlet 提供正确的模式,尤其是第二个和第三个?我知道/* 后缀和 *.前缀,但到目前为止似乎还不能正常工作。

最佳答案

我会假设

/context/categories/category1/

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

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

The path used for mapping to a servlet is the request URL from the request object minus the context path and the path parameters. The URL path mapping rules below are used in order. The first successful match is used with no further matches attempted:

  1. The container will try to find an exact match of the path of the request to the path of the servlet. A successful match selects the servlet.
  2. The container will recursively try to match the longest path-prefix. This is done by stepping down the path tree a directory at a time, using the ’/’ character as a path separator. The longest match determines the servlet selected.
  3. [...]
  4. [...]

映射

@WebServlet("/categories/*")

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

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

关于java - 具有重叠模式的 Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22908209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com