0

我有一个问题,这是否可以做到。我有一个配置文件 servlet,它有 2 个 url 模式, /profile 和 /profile/* 。所以在我的项目中,我有一个用户使用 GET /profile 来获取 JSON 中的所有配置文件。每个配置文件都有一个最喜欢的团队字符串。另外,我使用 /profile/* 来获取特定的配置文件,例如 /profile/2 。然后我有 profileFavTeam servlet,我想获取配置文件收藏团队的所有数据。因此,我需要获取配置文件 ID,因此我希望 url 为 /profile/"ID"/favteam,这将返回团队统计信息。

例如,如果个人资料 ID 为 2,有一个最喜欢的球队叫利物浦,我输入 /profile/2/favteam,它将显示利物浦的统计数据

那么我在 web.xml 中 profileFavTeam 的 url 是否会像这样,因为我希望用户在 ID /profile/*/favteam 中输入一个数字?

但是,如果我的配置文件 servlet 中有 /profile/* url 模式,这会起作用吗?

4

1 回答 1

0

这是行不通的。您基本上有路径映射(以 /* 结尾)或扩展映射(以 *. 开头)。请参阅 Servlet 规范的第 12.2 节

在 Web 应用程序部署描述符中,使用以下语法来定义映射:

■ 以“/”字符开头并以“/*”后缀结尾的字符串用于路径映射。

■ 以“*”开头的字符串。前缀用作扩展映射。

■ 空字符串("") 是一种特殊的URL 模式,它精确映射到应用程序的上下文根,即http://host:port/ / 形式的请求。在这种情况下,路径信息是“/”,servlet 路径和上下文路径是空字符串(“”)。

■ 仅包含“/”字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。

■ 所有其他字符串仅用于完全匹配。

如果有效的 web.xml(在合并来自片段和注释的信息之后)包含映射到多个 servlet 的任何 url 模式,则部署必须失败。

您应该实现 Front Controller 模式,使用单个 Servlet 接收所有请求,并根据该模式将它们委托给处理对象。

于 2020-03-16T21:57:10.187 回答