2011-01-25 98 views
7

我有这样的一个映射Jetty的servlet映射是否可以使用正则表达式?

<servlet-mapping> 
<servlet-name>service</servlet-name> 
<url-pattern>/service/*</url-pattern> 
</servlet-mapping> 

,但我也想 /服务/主 映射到主要的Servlet。

<servlet-mapping> 
<servlet-name>master</servlet-name> 
<url-pattern>/service/master</url-pattern> 
</servlet-mapping> 

我相信这里有冲突,因为调用/ service/*会立即触发服务servlet。有没有一种方法可以让我在servlet映射中使用某种排除或者可以用正则表达式来执行我想要做的事情?

回答

6

Servlet映射始终​​使用最具体的匹配,因此路径将始终映射到master

这是映射从Servlet 3.0 spec的第1章:

  1. 容器将尝试找到所求 到servlet的路径的路径的精确匹配。 A 成功匹配选择该servlet。
  2. 容器将递归地尝试匹配最长的路径前缀。这个 是通过一次删除路径树 一个目录来完成的,使用'/' 字符作为路径分隔符。最长匹配确定选择的servlet 。
  3. 如果URL路径中的最后一个段包含扩展名(例如 .jsp),那么servlet容器将尝试 以匹配处理 扩展请求的servlet。一个 扩展名被定义为 最后一个段后面的'。' 字符的一部分。
  4. 如果前三条规则都不导致servlet匹配,那么 容器将尝试服务 适合请求的资源 的内容。如果为应用程序定义的“默认”小服务程序为 ,则将使用 。许多容器提供了一个隐含的默认servlet来提供 内容。
+0

所以你说我映射是正确的?好吧,我已经尝试过了,并且/ service/master没有映射到master servlet – denniss 2011-01-25 20:12:48

相关问题