我正在构建实现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();
}
}
非常感谢任何帮助或信息材料!
答案 0 :(得分:7)
实际上你很困惑,因为你不明白球衣是如何运作的。 Jersey框架基本上使用com.sun.jersey.spi.container.servlet.ServletContainer
servlet来拦截所有传入的请求。正如我们在项目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>
答案 1 :(得分:4)
Jersey使用servlet将URL路由到适当的服务。您的服务本身不需要扩展servlet。
在较高级别,Jersey的ServletContainer
类接受请求,然后根据您的Jersey配置,将调用您的Web服务。您配置Jersey处理的url模式。查看section 5.3 http://www.vogella.com/articles/REST/。