Obtenir ServletContext dans la ressource JAX-RS

Je joue avec JAX-RS, en déployant sur Tomcat. C’est fondamentalement:

@Path("/hello") @Produces({"text/plain"}) public class Hellohandler { @GET public Ssortingng hello() { return "Hello World"; } } 

Est-ce que je peux obtenir le ServletContext dans ma ressource JAX-RS?

En outre, l’annotation @Resource peut ne pas fonctionner. Essaye ça

 @javax.ws.rs.core.Context ServletContext context; 

L’injection ne se produit pas tant que vous n’avez pas atteint la méthode de service

 public class MyService { @Context ServletContext context; public MyService() { print("Constructor " + context); // null here } @GET @Path("/thing") { print("in wizard service " + context); // available here 

Comme d’autres l’ont noté, le servletContext peut être injecté au niveau du champ. Il peut également être injecté au niveau de la méthode:

 public static class MyService { private ServletContext context; private int minFoo; public MyService() { System.out.println("Constructor " + context); // null here } @Context public void setServletContext(ServletContext context) { System.out.println("servlet context set here"); this.context = context; minFoo = Integer.parseInt(servletContext.getInitParameter("minFoo")).intValue(); } @GET @Path("/thing") public void foo() { System.out.println("in wizard service " + context); // available here System.out.println("minFoo " + minFoo); } } 

Cela vous permettra d’effectuer une initialisation supplémentaire avec le servletContext disponible.

Note évidente – vous n’avez pas besoin d’utiliser le nom de la méthode setServletContext . Vous pouvez utiliser n’importe quel nom de méthode tant que vous suivez le modèle de nommage standard des beans Java pour les parameters , annuler setXXX (Foo foo) et utiliser l’annotation @Context.

Le contexte de servlet est également disponible lorsque vous implémentez ServletContextListener. Cela facilite le chargement de parameters tels que la chaîne de connexion au démarrage. Vous pouvez définir la classe d’écouteur dans web.xml qui vous charge ServletContextListener au démarrage de votre application Web.

Dans le fichier web.xml, ajoutez les balises et . Le spécifie la classe appelée au démarrage. La définit le paramètre de contexte disponible dans votre application Web.

Tout d’abord, incluez les balises et dans le fichier web.xml:

    com.your.package.ServletContextClass    your_param your_param_value    

Créez maintenant la classe de contexte de servlet comme suit.

 public class ServletContextClass implements ServletContextListener { public void contextInitialized(ServletContextEvent arg0) { //use the ServletContextEvent argument to access the //parameter from the context-param Ssortingng my_param = arg0.getServletContext().getInitParameter("your_param"); }//end contextInitialized method @Override public void contextDestroyed(ServletContextEvent arg0) { }//end constextDestroyed method } 

Vous pouvez maintenant choisir la variable statique à atsortingbuer au paramètre que vous avez lu. Cela vous permet de lire le paramètre une fois au démarrage et de réutiliser plusieurs fois la variable statique à laquelle vous l’affectez.

Utilisez simplement l’injection de ressources comme ceci,

 @Resource ServletContext servletContext;