我有一个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。
我错过了什么?
答案 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之外,还有其他方法可以设置属性。见下面的链接。
另见: