Java HttpServlet类和与Jersey一起使用之间的混淆

Java HttpServlet类和与Jersey一起使用之间的混淆,java,rest,servlets,jersey,Java,Rest,Servlets,Jersey,我正在构建实现RESTful API的servlet。我知道Jersey是一个破译和使用给定URL的框架。如何将其与HttpServlet类结合使用 我不明白这两个人是如何合作的。我想这是一个非常宽泛的问题,但我读了相当多的书,但仍然停留在这个看似琐碎的概念上。我尝试使用扩展HttpServlet类并使用注释的类部署应用程序 @Path("/api") public class API extends HttpServlet{ @GET @Path("/{name}") @Produces("

我正在构建实现RESTful API的servlet。我知道Jersey是一个破译和使用给定URL的框架。如何将其与
HttpServlet
类结合使用

我不明白这两个人是如何合作的。我想这是一个非常宽泛的问题,但我读了相当多的书,但仍然停留在这个看似琐碎的概念上。我尝试使用扩展HttpServlet类并使用注释的类部署应用程序

@Path("/api")
public class API extends HttpServlet{

@GET
@Path("/{name}")
@Produces("text/hmtl")
public String doGetSayHello(@PathParam("name") String name){
    return "Hello" + name;
}
@GET
@Path("/articles")
@Produces("text/json")
public String doGetArticles(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{

    JSONObject obj = new JSONObject();
    obj.put("interns", interns);
    obj.put("company", "Stack Overflow");

    return obj.toString();

}
}


如有任何帮助或资料,将不胜感激

Jersey使用servlet将URL路由到适当的服务。您的服务本身不需要扩展servlet


在高层,Jersey的
ServletContainer
类接受请求,然后根据Jersey配置调用web服务。您可以配置Jersey处理的url模式。退房。

事实上,你很困惑,因为你不明白球衣是如何工作的。Jersey框架基本上使用
com.sun.Jersey.spi.container.servlet.ServletContainer
servlet拦截所有传入请求。当我们在projects web.xml中配置时,所有传入的rest请求都应该由该servlet处理。使用jersey servlet配置了一个init参数来查找REST服务类。REST服务类不是Servlet,它们不需要像在代码中那样扩展HttpServlet。这些REST服务类是简单的POJO注释,用于告诉jersey框架不同的属性,如路径、消耗、生产等。当您从服务方法返回时,jersey负责将这些对象编组到定义的“生产”响应类型中,并将其写入客户机流。下面是web.xml中的jersey配置示例

<servlet>
        <servlet-name>REST</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>
                com.rest.services;
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>REST</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

休息
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
com.rest.services;
1.
休息
/*

REST服务类不是Servlet是什么意思?在使用jersey时,您编写的是简单的java类而不是Servlet,这些类只需要为jersey框架添加注释,就可以将类中的方法作为REST服务公开。那么HttpServlet类的用途是什么呢?servlet类就是处理web请求的类。在Jersey的例子中,他们编写了一个扩展HttpServlet的ServletContainer类。它的实现是调用适当的web服务的部分。如果希望直接处理http请求(),可以编写自己的servlet。许多web框架(包括Jersey)使用所谓的前端控制器模式——它是一个servlet,用于接收请求并将它们路由到适当的位置。你只需要写更少的样板代码。啊,好的,非常感谢!这真的把事情弄清楚了。一直以来,我都以为我在尝试编写自己的servlet,试图将Jersey与之集成。