我正在尝试映射一个匹配两者的 servlet 模式
/server/abcDef/1432124/adfadfasdfa
和
/server/abcDef/abcd/12345
“1432124”和“abcd”的值不是固定的,可以是多个值。所以基本上我需要与 /abcDef/*/*
匹配——只有 abcDef 是固定的。
我有办法映射这个吗?我真的在寻找类似以下的东西:
<servlet-mapping>
<servlet-name>abcDefServlet</servlet-name>
<url-pattern>/server/abcDef/*/*</url-pattern>
</servlet-mapping>
最佳答案
根据Servlet Specification ,以“/*”结尾的 URL 模式会将所有请求匹配到前面的路径。 因此,按照您执行此操作的方式,您必须输入以下 url 才能访问 abcDefServlet:
http://myapp.com/server/abcDef/*/<wildcard>
您可以做的是在一个 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>
更新:
由于 1432124
和 abcd
不是固定值,您可以安全地添加以下映射:
<servlet-mapping>
<servlet-name>abcDefServlet</servlet-name>
<url-pattern>/server/abcDef/*</url-pattern>
</servlet-mapping>
然后在 servlet 内部处理 abcDef
之后的任何值,使用以下函数:
req.getPathInfo()
关于java - 带有多个(两个)通配符的 Servlet 映射,通配符由斜杠分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16867674/