假设我想接受以下网址:
http://myserver/myapplication/posts
http://myserver/myapplication/posts/<id>
http://myserver/myapplication/posts/<id>/delete
如何使用servlet装饰器@WebServlet
来执行此操作?我正在调查value
和urlPatterns
,但我不知道如何做到这一点。例如,
@WebServlet(urlPatterns={"/posts", "/posts/*"})
[..]
String param = request.getPathInfo();
给了我一些结果,但如何使用它?此外,request.getPathInfo()
似乎返回通配符的值,但如果我想要更多参数,例如http://http://myserver/myapplication/posts/<id>/delete/<force>
,该怎么办?
答案 0 :(得分:7)
在servlet规范中,你没有路径变量的概念。一些MVC框架确实支持它们,例如Struts或Spring MVC。
对于servlet的观点,URL是:
scheme://host.domain/context_path/servlet_path/path_info?parameters
其中任何部分(从上下文路径开始可能为空)
servlet 3.0的规范说明:
HttpServletRequest接口中存在以下方法来访问它 信息:
重要的是要注意,除了URL编码请求之间的差异 URI和路径部分,以下等式始终为真:
requestURI = contextPath + servletPath + pathInfo
这意味着你只需要使用@WebServlet(urlPatterns={"/posts"})
,然后用手解码 pathInfo部分来提取命令和参数
答案 1 :(得分:1)
我认为你不能只使用@WebServlet
注释。 urlPatterns仅作为Servlet的指令,以指示应该参加哪些url模式。
正如您可以通过此文档https://docs.oracle.com/javaee/6/api/javax/servlet/annotation/WebServlet.html看到的那样,当urlPatterns是一个字符串而不是它们的数组时,该值就是这种情况。
正如brso05所述,您需要从请求中解析您的参数。