Bla*_*gle 31 web.xml servlets get path-parameter
servlet是否支持URL如下:
/xyz/{value}/test
Run Code Online (Sandbox Code Playgroud)
其中的价值可以用文字或数字代替.
如何在web.xml中映射?
Bal*_*usC 49
Servlet API不支持*在映射中间使用URL模式通配符.它只允许*映射结束时的通配符,/prefix/*或者像映射的开头一样*.suffix.
使用标准允许的URL模式语法,最好的办法是将其映射/xyz/*并使用提取路径信息HttpServletRequest#getPathInfo().
所以,给定一个<url-pattern>/xyz/*</url-pattern>,这里是一个基本的启动示例,如何提取路径信息,空检查和数组索引超出边界检查省略:
String pathInfo = request.getPathInfo(); // /{value}/test
String[] pathParts = pathInfo.split("/");
String part1 = pathParts[1]; // {value}
String part2 = pathParts[2]; // test
// ...
Run Code Online (Sandbox Code Playgroud)
如果你想要像Apache HTTPD那样更精细的控制mod_rewrite,那么你可以看看Tuckey的URL重写过滤器.
正如其他人所指出的那样,servlet规范不允许这样的模式; 但是,如果这适合您的用例,您可以考虑允许这种模式的JAX-RS.
@Path("/xyz/{value}/test")
public class User {
public String doSomething(@PathParam("value") final String value) { ... }
}
Run Code Online (Sandbox Code Playgroud)
要么:
@Path("/xyz/{value}")
public class User {
@Path("test")
public String doTest(@PathParam("value") final String value) { ... }
}
Run Code Online (Sandbox Code Playgroud)
(相关:https://stackoverflow.com/a/8303767/843093.)