Jersey 2:如何将参数从web.xml传递到应用程序?

Jersey 2:如何将参数从web.xml传递到应用程序?,jersey,jax-rs,jersey-2.0,Jersey,Jax Rs,Jersey 2.0,我的web容器知道我的应用程序是在调试模式还是发布模式下运行。我想将此信息传递给我的ResourceConfig/应用程序类,但不清楚如何读取此信息 是否可以通过servlet/过滤器参数传递信息?如果是,怎么做?以下是我的做法: 在web.xml中: 设置为true时,所有操作都包括调试信息 com.example.DEBUG_API_已启用 真的 在我的应用程序中子类: @ApplicationPath(“api”) 公共类重新启动应用程序扩展了应用程序{ @上下文 受保护的服务上下文s

我的web容器知道我的应用程序是在调试模式还是发布模式下运行。我想将此信息传递给我的ResourceConfig/应用程序类,但不清楚如何读取此信息


是否可以通过servlet/过滤器参数传递信息?如果是,怎么做?

以下是我的做法:

web.xml
中:


设置为true时,所有操作都包括调试信息
com.example.DEBUG_API_已启用
真的
在我的
应用程序中
子类:

@ApplicationPath(“api”)
公共类重新启动应用程序扩展了应用程序{
@上下文
受保护的服务上下文sc;
@凌驾

public Set>Set=new HashSet在Jersey 1中,可以将
@Context-ServletContext-ServletContext
传递给
应用程序
类的构造函数,但在Jersey 2中,这不再起作用。Jersey 2似乎只会在请求时注入

要在Jersey 2中解决此问题,请使用匿名
ContainerRequestFilter
在请求时访问ServletContext,并将所需的init参数传递给
应用程序

公共类MyApplication扩展应用程序{
@上下文保护的ServletContext ServletContext;
私有字符串myInitParameter;
@凌驾
公共集getSingleton(){
Set singleton=newhashset();
添加(新的ContainerRequestFilter(){
@凌驾
公共无效筛选器(ContainerRequestContext ContainerRequestContext)引发IOException{
已同步(MyApplication.this){
if(myInitParameter==null){
myInitParameter=servletContext.getInitParameter(“myInitParameter”);
//在此根据init参数进行任何初始化
}
}
}
返回单身人士;
});
};
}

这已在Jersey 2.5中修复:

您现在应该能够将
@Context ServletContext
注入
应用程序
构造函数

以下是一个预期如何工作的示例:

public class MyApplication extends Application
{
  private final String myInitParameter;

  public MyApplication(@Context ServletContext servletContext)
  {
    this.myInitParameter = servletContext.getInitParameter("myInitParameter");
  }
}

您还可以调用
ServiceLocator.getService(ServletContext.class)
从应用程序中的任何一点获取
ServletContext

我不接受这个答案,因为我得到的ServletContext值为null。看看我,我不是唯一的一个。你可能想在你的问题中更具体一些。我的代码为我工作,符合Java EE规范,并且符合你在问题中提出的要求。我注意到ed你在Jersey邮件列表的帖子中提供了更多细节,但你在这里没有提到:你想让属性在构造函数中可用?为什么不接受我对你在这里发布的问题的回答,并提出一个包含所有细节的新问题?如果你确实想在应用程序构造函数中使用参数,我想你会ed想看看其他各种建议之一(将它们作为系统属性传递给JVM、使用属性文件等)。但是,如果您在应用程序启动时只需要这些参数(例如,与每个请求相反),则需要@Provider类(构造函数中支持注入)可能会有帮助。在GlassFish 3.1.2.2和Jersey 1.11.1中,我尝试过,它们是在应用程序子类实例化之后直接实例化的(我从
GetSingleton
返回我的
@Provider
类)。很高兴知道!您能提供一个示例来实际回答提出的问题吗?