2017-08-09 150 views
0

当使用泽西编写Web服务我增加了ServletContainer到web.xml使用泽西

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

什么用这种ServletContainer的编写REST Web服务在使用ServletContainer? ServletContainer不是tomcat吗?
有没有一种方法来实施其余的Web服务没有泽西岛或任何其他第三方框架?

回答

2

这个ServletContainer有什么用?

通常任何类的使用都在其javadoc中解释。幸运的是,新泽西人认真对待了javadoc,你的回答确实是​​。

com.sun.jersey.spi.container.servlet

类ServletContainer

ServletFilter部署根资源类。

如果这个类被声明为一个过滤器和初始化参数PROPERTY_WEB_PAGE_CONTENT_REGEX未设置或FEATURE_FILTER_FORWARD_ON_404没有设置为true,那么过滤器必须在过滤器链中的最后一个位置被声明为过滤器将不会转发给任何要求链中的下一个过滤器(如果有的话)。

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

可以将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实例将被创建并构造成使得以下类可以被注入到使用上下文根资源,提供商和应用程序的类:HttpServletRequestHttpServletResponseServletContextServletConfigWebConfig。如果此类用作Servlet,则可以注入ServletConfig类。如果此类用作Filter则可以注入FilterConfig类。可以注入WebConfig以抽象servlet或过滤器部署。

IoCComponentProviderFactory实例可以通过扩展这个类并覆盖方法initiate(ResourceConfig, WebApplication)IoCComponentProviderFactory实例发起WebApplication注册。


不是Tomcat中ServletContainer?

是的。只是com.sun.jersey.spi.container.servlet.ServletContainer这个班的名字被严重挑选了。他们最好命名为RestControllerRestApiDispatcher orso。


是否有实现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)或其他内容表示。