使用Jersey

时间:2017-08-09 15:46:40

标签: java rest web-services servlets jersey

使用Jersey编写Web服务时,我将向Web.xml添加ServletContainer

 <servlet>
    <servlet-name>Back-End API</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

这个ServletContainer有什么用? ServletContainer不是tomcat吗? 有没有办法在没有Jersey或任何其他第三方框架的情况下实现Rest Web服务?

1 个答案:

答案 0 :(得分:2)

  

这个ServletContainer的用途是什么?

通常在其javadoc中解释任何类的使用。幸运的是,泽西岛的球员认真对待javadocs,你的回答确实是right there

  

<子>的 com.sun.jersey.spi.container.servlet

     

Class ServletContainer

     

用于部署根资源类的ServletFilter

     

如果将此类声明为过滤器并且未设置初始化参数PROPERTY_WEB_PAGE_CONTENT_REGEX或未将FEATURE_FILTER_FORWARD_ON_404设置为true,则必须在过滤器链的最后位置声明过滤器, filter不会将任何请求转发给链中的下一个过滤器(如果有)。

     

以下部分引用了初始化参数。除非另有说明,否则初始化参数适用于服务器和过滤器初始化参数。

     

servlet或过滤器可以配置为具有初始化参数“com.sun.jersey.config.property.resourceConfigClass”或“javax.ws.rs.Application”,其值是类的完全限定名称。实现ResourceConfigApplication。如果具体类具有采用Map类型的单个参数的构造函数,则使用该构造函数实例化该类,并将包含所有初始化参数的Map实例作为参数传递。否则,该类被实例化为由运行时管理的单例组件,并且可以执行注入(可以注入的工件仅限于在配置servlet或过滤器时注册的可注入提供程序。)

     

如果初始化参数“com.sun.jersey.config.property.resourceConfigClass”或“javax.ws.rs.Application”不存在且初始化参数“com.sun.jersey.config.property.packages”存在(参见PackagesResourceConfig.PROPERTY_PACKAGES)创建了PackagesResourceConfig的新实例。初始化参数“com.sun.jersey.config.property.packages”必须设置为提供一个或多个包名。每个包名必须用';'分隔。使用属性名称“com.sun.jersey.config.property.packages”将包名称作为属性值添加到Map实例。然后将任何其他初始化参数添加到Map实例。然后将Map实例传递给PackagesResourceConfig的构造函数。

     

如果不存在上述资源配置相关的初始化参数,则会创建WebAppResourceConfig的新实例。初始化参数“com.sun.jersey.config.property.classpath”可以设置为提供一个或多个资源路径。每条路径必须用';'分隔。使用属性名称“com.sun.jersey.config.property.classpath”将资源路径作为属性值添加到Map实例。然后将任何其他初始化参数添加到Map实例。然后将Map实例传递给WebAppResourceConfig的构造函数。如果初始化参数不存在,则使用以下资源路径:“/ WEB-INF / lib”和“/ WEB-INF / classes”。

     

所有初始化参数都作为创建的ResourceConfig的属性添加。

     

将创建并配置一个新的WebApplication实例,以便可以使用上下文将HttpServletRequestHttpServletResponse,{{ 1}},ServletContextWebConfig。如果此类用作ServletConfig,则可以注入Servlet类。如果此类用作ServletConfig,则可以注入Filter类。可以注入WebConfig来抽象servlet或过滤部署。

     

可以通过扩展此类并覆盖方法IoCComponentProviderFactory来注册initiate(ResourceConfig, WebApplication)实例,以使用WebApplication实例启动IoCComponentProviderFactory

  

是不是tomcat的ServletContainer?

是的,是的。只是选择了类FilterConfig的名称。他们最好将其命名为com.sun.jersey.spi.container.servlet.ServletContainerRestController orso。

  

有没有办法在没有Jersey或任何其他第三方框架的情况下实现Rest Web服务?

烨。您有几种选择:

  • Homegrow your own framework。在业余爱好项目中作为学习练习很有趣,但是当它为生产应用程序这样做时,它只会长期咬你。硬。
  • 或者,更好,replace Tomcat by a real Java EE server。它内置了JAX-RS,你已经准备好了,没有太多的手动配置麻烦。根据Java EE服务器,JAX-RS实现可以由Jersey(GlassFish / Payara)或RESTEasy(WildFly / JBossAS)或CXF(TomEE)或其他东西代表别的。