Obtenir ServletContext dans l'application

Pourriez-vous expliquer comment je peux obtenir le ServletContext exemple, dans mon Application's sous-classe? Est-il possible? J'ai essayé de faire comme dans l'extrait suivant, mais il ne semble pas fonctionner - le ctx n'est pas définie:

import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;

//...

@ApplicationPath("/")
public class MainApplication extends Application {

    @Context ServletContext ctx;

    @Override
    public Set<Class<?>> getClasses() {     
        Set<Class<?>> classes = new HashSet<Class<?>>();
//...
        return classes;
    }
}

web.xml:

<web-app ...>
 <context-param>
  <param-name>environment</param-name>
  <param-value>development</param-value>
 </context-param>
 <filter>
  <filter-name>jersey-filter</filter-name>
  <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
   <init-param>
   <param-name>javax.ws.rs.Application</param-name>
   <param-value>my.MainApplication</param-value>
  </init-param>
</filter>
...
</web-app>

Le problème est que j'ai besoin d'obtenir des paramètres de contexte. Si il y a une autre façon, je serais reconnaissant si quelqu'un a donné une indication.


Je comprends que Context annotation peuvent ne pas être adaptés pour cela. En fait, je n'ai pas besoin ServletContext lui-même. Si seulement je pouvais les mettre en contexte params de web.xml, je serais parfaitement heureux.

Voici un exemple de ce que j'ai vraiment besoin de:

import java.util.HashSet;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;

import org.glassfish.hk2.utilities.binding.AbstractBinder;

public class MainApplication extends Application {

    @Context ServletContext ctx;

    @Override
    public Set<Object> getSingletons() {
        Set<Object> set = new HashSet<Object>();
        final String environment = ctx.getInitParameter("environment");
        //final String environment = ... get context parameter from web xml
        set.add(new AbstractBinder() {

            @Override
            protected void configure() {
                bind(new BaseDataAccess(environment)).to(DataAccess.class);             
            }
        });
        //...
        return set;
    }
}

Grâce.

source d'informationauteur Industrious