Servlet中的URL模式带有中间通配符

3

我正在开发一个HttpServlet,并尝试使用通配符定义url-pattern,但是没有找到太多相关的文档。

我想要捕获的路径是"resource/{id}/action"

我已经尝试使用以下注释:

@WebServlet("/resource/*/action")

但是这并不匹配,虽然更基本的“resource / *”可以正常工作。

此外,我是否有办法自动提取我的 {id} 通配符,而不必手动解析 URL?


1个回答

0

我认为你试图解决错误的任务。像这样在通配符上映射servlet是非常不寻常的决定。看一下Spring MVC框架,你可以编写像这样的方法

@RequestMapping("/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
  Owner owner = ownerService.findOwner(ownderId);  
  Pet pet = owner.getPet(petId);  
  model.addAttribute("pet", pet);  
  return "displayPet"; 
}

1
有没有一种使用纯Java和XML来完成这个的方法? - CodyBugstein
@Imray 当然,你可以编写简单的手动调度程序,在doGet/doPost方法中解析查询字符串(即使用正则表达式)。这真的很简单。 - Alexey Sviridov
你的意思是,如果我想要捕获user/123/reports/r33(换句话说,代表用户123提交的报告r33的页面),我应该将user/*映射到某个servlet Parser并在其中运行整个正则表达式解析器?听起来很复杂。 - CodyBugstein
@Imray 我再多说一点 - 最好将映射调度servlet映射到处理/*请求,然后按照您的规则解析和拆分它。是的,听起来很复杂,但比维护一堆servlet映射要容易得多,而且更好(当然,这只适用于原始servlet)。 - Alexey Sviridov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接