如何使用Servlet API处理POST请求

HTTP 418:

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

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

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

我想象这样的事情:

@POST
public void Save(String stringToSave) {
    // Save to DB?
}
stdunbar:

您可能会用谷歌搜索一下,但是让我给您一个快速的概述。一个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(在本例中为URL /sampleService/v1/hello),HTTP方法以及Content-Type请求和响应的上的路径另外,如果SomeObject正确定义对象,则JAX-RS框架将自动为您将传入的JSON或XML有效负载反序列化为对象。

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

注意,虽然不直接相关,但是JAX-RS框架利用了Servlet框架。实际上,在JAX-RS中,您可以在方法中访问HttpServletRequestHttpServletResponse对象。

哪种方式更好?通常,我建议尽可能使用JAX-RS,因为它是较新的标准,易于实现。但是,如果您在JavaEE领域中从事任何工作,您很可能会遇到Servlet代码,因此理解它也很重要。

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

还有更多,但让我们从那里开始,看看它是否能满足您的需求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章