如何从Jersey 2.x servlet访问init-param?

时间:2017-03-27 01:56:16

标签: java tomcat servlets jersey jax-rs

我有一个RESTful服务,根据web.xml中的以下规范作为Tomcat servlet运行:

    <servlet>
    <servlet-name>User Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>demo.web.ix.users</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
    </init-param>
    <init-param>
        <param-name>myCustomParam</param-name>
        <param-value>some_value</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>User Service</servlet-name>
    <url-pattern>/web/ix/users/*</url-pattern>
</servlet-mapping>

在demo.web.ix.users包中,有一个名为UserService的类,它实现RESTful方法,但扩展任何其他类。它只是注释(@GET,@ POST等),允许泽西岛拿起它。

我需要从servlet代码中读取 myCustomParam 的值。我发现如果servlet扩展了任何servlet类(Generic,Http等),调用 servletConfig.getInitParameter(&#34; myCustomParam&#34;)将是这样做的方法。

我尝试更改UserService,以便扩展 org.glassfish.jersey.servlet.ServletContainer ,但它没有帮助,因为getServletConfig()方法始终返回null。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

注入Configuration。您可以从getProperty

获取值
@Context
private Configuration config;
...

String prop = (String) config.getProperty('customProp');

您也可以注入ServletContext并使用其方法getInitParameter

Configuration更具可移植性,因为它不会将您绑定到servlet环境,例如您想要移动到一个灰熊容器。使用Configuration Jersey只会在servlet环境中将所有init-params传输到Configuration。如果您不在servlet环境中,那么除了init-param之外,还有其他方法可以设置属性。见下面的链接。

另见: