如何使用Servlet API处理POST请求

问题描述 投票:0回答:1

我正在尝试使用Jetty Server创建一个API,我有这个简单的GET请求:

@GET
public String helloWorld(){
    return "Hello world";
}

为了发出POST请求,我假设必须将输入保存到Jetty服务器。我试图研究了很长一段时间,但一无所获。

我想象这样的事情:

@POST
public void Save(String stringToSave) {
    // Save to DB?
}
java api servlets jax-rs
1个回答
2
投票

你可以谷歌这个,但让我给你一个快速概述。 Servlet是一段代码,通常在HTTP操作期间运行 - GET,POST等。它是JavaEE世界的原始技术,已于1990年代后期发布。

使用现代注释的简单Java servlet看起来像:

@WebServlet(name = "SampleServlet", urlPatterns = "/sampleServlet")
public class SampleServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // called when an HTTP POST is sent
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // called when an HTTP GET is sent
    }
}

需要注意的重要部分是,类扩展了HttpServlet,并且必须编写代码以从请求中提取数据并将其推送到响应中。这样做并不坏,但确实必须这样做。

JAX-RS是一个更新的标准,旨在简化REST服务的创建。它也是在HTTP交互期间运行的一大块代码。

一个简单的例子是:

@Path("/sampleService")
public class SampleService{
    @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    @POST
    @Path("/v1/hello")

    public Response sayHello( SomeObject someobject ) {

这里的代码既简单又复杂一点。注释的使用有助于确定服务在URL(在本例中为/sampleService/v1/hello),HTTP方法以及请求和响应的Content-Type上存在的路径。此外,如果正确定义了SomeObject对象,JAX-RS框架将自动将传入的JSON或XML有效负载反序列化为对象。

Response对象包含HTTP响应代码(可能是茶壶)和响应主体。在此示例中,正文将以与HTTP请求的Accept标头匹配的方式自动序列化回请求者(即,application/json Accept标头的JSON和application/xml的XML)。

请注意,尽管没有直接相关,JAX-RS框架利用了Servlet框架。实际上,在JAX-RS中,您可以在方法中访问HttpServletRequestHttpServletResponse对象。

哪种方式“更好”?一般情况下,我建议尽可能使用JAX-RS,因为它是更新的标准,并且更容易实现。但是,如果你在JavaEE世界中做任何工作,你很可能会遇到Servlet代码,因此理解它也很重要。

请注意,Servlet和JAX-RS都需要某种应用程序服务器。码头就是其中之一。另一个非常常见的是Tomcat。应用程序服务器为您的代码设置环境并侦听传入的HTTP消息。当它获得一个时,它会查看它是否知道如何处理URL并路由到适当的位置。在servlet世界中,服务器仅在URL上路由。在JAX-RS世界中,服务器在URL上进行路由,如果由@Consumes注释指定,​​则也是HTTP Content-Type头。

还有更多,但让我们从那里开始,看看它是否能解决你所追求的问题。

© www.soinside.com 2019 - 2024. All rights reserved.