HttpServlet类之间的混淆以及与Jersey一起使用它

sah*_*ast 4 java rest servlets jersey

我正在构建实现​​RESTful API的servlet.我理解Jersey是一个解密和使用给定URL的框架.我如何与HttpServlet班级一起使用它.

我不明白这两者是如何相互配合的.我想这是一个非常广泛的问题,但我已经做了相当多的阅读,但我仍然坚持这个看似微不足道的概念.我试图HttpServlet使用扩展类的类来部署应用程序并使用Jersey注释.

@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();

}
Run Code Online (Sandbox Code Playgroud)

}

任何帮助或信息材料将不胜感激!

Jun*_*san 7

实际上你很困惑,因为你不明白球衣的运作方式.Jersey框架基本上使用com.sun.jersey.spi.container.servlet.ServletContainerservlet来拦截所有传入的请求.正如我们在项目web.xml中配置的那样,所有传入的rest请求都应由该servlet处理.有一个init-param配置了jersey servlet来查找REST服务类.REST服务类不是Servlet,它们不需要像在代码中那样扩展HttpServlet.这些REST服务类是简单的POJO注释,用于告诉jersey框架不同的属性,如路径,消耗,产生等.当您从服务方法返回时,jersey负责在定义的'PRODUCES'responseType中编组这些对象并编写它在客户端流上.以下是web.xml中的泽西配置示例

<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>
Run Code Online (Sandbox Code Playgroud)


Jef*_*rey 5

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

在较高的层次上,Jersey 的ServletContainer类接受请求,然后根据您的 Jersey 配置,您的 Web 服务将被调用。您可以配置 Jersey 处理哪些 url 模式。查看第 5.3 节 http://www.vogella.com/articles/REST/。