使用斜杠分隔的多个(两个)通配符的Servlet映射

Sai*_*Sai 7 java web.xml servlets url-pattern

我试图映射一个匹配两者的servlet模式

/server/abcDef/1432124/adfadfasdfa 
Run Code Online (Sandbox Code Playgroud)

/server/abcDef/abcd/12345
Run Code Online (Sandbox Code Playgroud)

值'1432124'和'abcd'不是固定的,可以是多个值.所以基本上我需要匹配/abcDef/*/*- 只有abcDef是固定的.

有没有办法让我映射这个?我真的在寻找以下内容:

<servlet-mapping>
    <servlet-name>abcDefServlet</servlet-name>
    <url-pattern>/server/abcDef/*/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

Cas*_*sio 11

根据Servlet规范,以"/*"结尾的URL模式将匹配前一路径的所有请求.所以,按照你的方式,你必须输入以下url才能访问abcDefServlet:

http://myapp.com/server/abcDef/*/<wildcard>
Run Code Online (Sandbox Code Playgroud)

您可以做的是在一个servlet映射中添加多个URL模式.例如:

<servlet-mapping>
   <servlet-name>abcDefServlet</servlet-name>
   <url-pattern>/server/abcDef/1432124/*</url-pattern>
   <url-pattern>/server/abcDef/abcd/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

更新:

由于1432124abcd不是固定值,您可以安全地添加以下映射:

<servlet-mapping>
   <servlet-name>abcDefServlet</servlet-name>
   <url-pattern>/server/abcDef/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

然后abcDef使用以下函数处理servlet内部之后的任何值:

req.getPathInfo()
Run Code Online (Sandbox Code Playgroud)

  • **更新的**部分是正确的.+1 (2认同)