【问题标题】:HttpServlet using @Path("/path") with @POST versus doPostHttpServlet 使用 @Path("/path") 和 @POST 与 doPost
【发布时间】:2023-03-14 08:47:02
【问题描述】:

我对 @Path("/path") 与 @POST 方法与 doPost(HttpServletRequest request, HttpServletResponse response) 方法的 HttpServlet 用法有点困惑。我见过很多很好的 @Path 用法示例,但从来没有一个 doPost 的有效示例。当我尝试使用 doPost 时,它永远不会被调用。

首先,有什么区别,哪种方法更好?另外,我在 doPost 上做错了什么

public class PostExample extends HttpServlet{


@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

    // HttpServlet doPost never gets called
    System.out.println("hit test doPost "+request.getRequestURI());


}
 }

谢谢!

【问题讨论】:

    标签: java servlets


    【解决方案1】:
    "what's the difference, and which is a better way to go"
    

    注解@GET、@PUT、@POST、@DELETE 和@HEAD 是 JAX-RS 的一部分:用于 RESTful Web 服务规范的 Java API,用于指定资源的 HTTP 请求类型,并在 Web 服务框架中实现,例如Jersey 和 Apache CXF,在您真正使用这些框架之前,您不会使用它们。

    Wiki JAX-RS

    "what am I doing wrong with the doPost"    
    

    您需要在 web.xml 中指定 servlet

    <servlet>
      <servlet-name>PostExample</servlet-name>
      <servlet-class>com.examples.PostExample</servlet-class>
    </servlet>
    <servlet-mapping>
       <servlet-name>PostExample</servlet-name>
       <url-pattern>/myservlet/*</url-pattern>
    </servlet-mapping>
    

    【讨论】:

    • 首先感谢您的解释!我正在使用 Jersey,并在两个实现下的 web.xml 文件中注册了 servlet——我只是在类中测试时注释了必要的块。话虽如此,为什么 doPost 不被调用? @POST 指定的方法被调用就好了?
    • 为了澄清,doPost方法是否需要从@POST指定的方法中手动调用?我理解“服务”方法是假设自动调用“doPost”。
    • @POST 注释指定该方法响应 HTTP POST 请求,无论您的方法名称在其中是什么。它可以是 public void doPost() 或 public String doPost() 或 public字符串 postMe()。您可以像在 HttpServlet 的普通 doPost 方法中一样进行操作。这是你问的一个例子example
    • 好吧,我想我开始明白了:我最初在问题中发布的 doPost 方法是 Jersey 之外的非 RESTful 实现 - 请注意方法中的参数。我发布的示例中没有 @... 注释。这逐字逐句取自另一个可能有效的示例。
    • 如果您仍有任何疑问,请发布任何 cmets?
    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2018-07-20
    • 1970-01-01
    • 2017-04-18
    • 2022-07-25
    相关资源
    最近更新 更多