假设我要接受以下网址:

http://myserver/myapplication/posts
http://myserver/myapplication/posts/<id>
http://myserver/myapplication/posts/<id>/delete


如何使用servlet装饰器@WebServlet这样做?我正在调查valueurlPatterns,但是我不知道如何去做。例如,

@WebServlet(urlPatterns={"/posts", "/posts/*"})
[..]
String param = request.getPathInfo();


给我一些结果,但是如何使用呢?另外,request.getPathInfo()似乎返回通配符的值,但是如果我想要更多的参数,例如http://http://myserver/myapplication/posts/<id>/delete/<force>,该怎么办?

最佳答案

在Servlet规范中,您没有路径变量的概念。一些MVC框架确实支持它们,例如Struts或Spring MVC。

从servlet的角度来看,URL是:

scheme://host.domain/context_path/servlet_path/path_info?parameters


其中任何部分(从上下文路径开始可能为空)

Servlet 3.0状态规范:


上下文路径:与此ServletContext关联的路径前缀
servlet是其中的一部分。如果此上下文是植根于
Web服务器的URL名称空间,此路径将为空字符串。否则,如果
上下文不是植根于服务器名称空间的根,路径以
/字符,但不以/字符结尾。
Servlet路径:直接对应于映射的路径部分
激活了此请求。除以下情况外,此路径以“ /”字符开头
请求与“ / *”或“”模式匹配的情况,在这种情况下,
空字符串。
PathInfo:请求路径的一部分,不属于Context Path或
Servlet路径。如果没有多余的路径,则为null,或者为带前导字符串
‘/’。


HttpServletRequest接口中存在以下方法可以访问此方法
信息:


getContextPath
getServletPath
getPathInfo


请务必注意,除了请求之间的URL编码差异外
URI和路径部分,以下等式始终成立:

requestURI = contextPath + servletPath + pathInfo


这意味着您只需要使用@WebServlet(urlPatterns={"/posts"}),然后手动解码pathInfo部分以提取命令和参数。

09-30 15:15
查看更多