Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Servlet API处理POST请求_Java_Api_Servlets_Jax Rs - Fatal编程技术网

Java 如何使用Servlet API处理POST请求

Java 如何使用Servlet API处理POST请求,java,api,servlets,jax-rs,Java,Api,Servlets,Jax Rs,我正在尝试使用Jetty Server制作API,我有一个简单的GET请求: @GET public String helloWorld(){ return "Hello world"; } 为了发出POST请求,我假设必须将输入保存到Jetty服务器。我试着研究了好一阵子,但什么也没找到 我想象这样的情况: @POST public void Save(String stringToSave) { // Save to DB? } 你可以用谷歌搜索这个,但让我给你一个快速的

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

@GET
public String helloWorld(){
    return "Hello world";
}
为了发出
POST
请求,我假设必须将输入保存到Jetty服务器。我试着研究了好一阵子,但什么也没找到

我想象这样的情况:

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

你可以用谷歌搜索这个,但让我给你一个快速的概述。是通常在HTTP操作(GET、POST等)期间运行的一段代码。它是JavaEE世界的原始技术,在20世纪90年代末发布

使用现代注释的简单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,您必须编写代码从请求中提取数据并将其推入响应中。这样做并不坏,但确实必须这样做

是一个更新的标准,旨在简化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方法以及请求和响应的
内容类型。此外,如果正确定义了
SomeObject
对象,JAX-RS框架将自动将传入的JSON或XML负载反序列化为一个对象

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

请注意,虽然JAX-RS框架没有直接关联,但它利用了Servlet框架。实际上,在JAX-RS中,您可以访问方法中的
HttpServletRequest
HttpServletResponse
对象

哪条路“更好”?总的来说,我建议尽可能使用JAX-RS,因为它是较新的标准,更易于实现。然而,如果您在JavaEE世界中做任何工作,您很可能会遇到Servlet代码,因此理解它也很重要

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


还有很多,但让我们从这里开始,看看它是否符合您的要求。

这似乎不是非常特定于码头。我想说这是Servlet或JAX-RS特定的。@JoakimErdfelt谢谢,它可能与其中一个有关,然后你询问Servlet API但发布JAX-RS代码-你需要什么帮助?@stdunbar我没有足够的经验知道。如果要分析我是否需要JAX-RS或ServletAPI的帮助,您需要我提供什么代码片段?这非常有用。我真的非常感谢你花时间写了这么详细的答案。很抱歉回复得太晚,我直到现在才真正有机会查看。我所能说的是,我真的很感谢你的时间和帮助,这是一本很有帮助的书。如果可以的话,我还有一个后续问题。像Jetty这样的服务器是否使用servlet来创建服务器?我有一段代码,其中使用了
org.eclipse.jetty.server.server
org.eclipse.jetty.server.ServerConnector
org.eclipse.jetty.util.thread.QueuedThreadPool和其他类导入以创建服务器,例如
服务器服务器=新服务器(线程池)看起来像代码。这意味着,您可以自己创建服务器,而不用预先构建环境。但是没有,嵌入式服务器可能能够运行servlet,但是servlet规范与直接创建服务器无关。