Java Jetty';是否可以使用正则表达式;什么是servlet映射?

Java Jetty';是否可以使用正则表达式;什么是servlet映射?,java,servlets,jetty,Java,Servlets,Jetty,我有一张地图 <servlet-mapping> <servlet-name>service</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping> 服务 /服务/* 但我也想要 /服务/船长 映射到主servlet <servlet-mapping> <servlet-name>master</ser

我有一张地图

<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映射中使用某种排除,或者可以使用regexp来执行我想要执行的操作?

servlet映射始终使用最特定的匹配,因此路径
/service/master
将始终映射到
master

这是映射的第一条规则:

  • 容器将尝试查找请求路径的精确匹配 指向servlet的路径。A. 成功匹配将选择servlet
  • 容器将递归地尝试匹配最长路径前缀。这 通过从路径树中走下来完成 使用“/”一次创建一个目录 字符作为路径分隔符。这个 最长匹配确定servlet 选中
  • 如果URL路径中的最后一段包含扩展名(例如。 .jsp),servlet容器将尝试 匹配处理 请求延期。一 扩展被定义为 最后一个“.”之后的最后一段 性格
  • 如果前三个规则都没有导致servlet匹配,则 集装箱将尝试服务 适合资源的内容 请求。如果选择了“默认”servlet 为应用程序定义,它将 被使用。许多容器提供了一个 服务的隐式默认servlet 内容

  • 您可以尝试使用谷歌Guice。 ServletModule.serveRegex(字符串regex,字符串…regex) 将允许您在映射中使用正则表达式


    看这里

    你是说我的映射是正确的?我已经试过了,但是/service/master没有映射到master servletry另一个容器,例如Tomcat。我经常在Jetty上看到这样的奇怪现象。作为一种解决方法,首先尝试使用主映射(尚未测试,但我认为这可能会起作用)。@denniss-1)您使用的Jetty版本是什么?2) 您的web.xml是什么版本?在Servlet2.5之前,请求映射的规则是礼貌的建议,因此Jetty可能不符合。另外,请注意,映射是区分大小写的,因此
    /service/master
    应该与master匹配,而
    /service/master
    应该与service匹配。我刚刚在Jetty 6.1.15上做了一个快速测试,效果很好。请注意,尽管McDowell关于区分大小写的评论适用,而且您在master上没有通配符,因此它匹配
    service/master
    ,但不匹配
    service/master/x