66 votes

Obtenez de ServletContext sur tomcat à partir de jax-rs / jersey

Je suis en train de jouer autour avec jax-rs , le déploiement sur tomcat (manipulation via com.soleil.ws.le repos.le spi.le conteneur.servlet.ServletContainer). Il s'agit essentiellement d'

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

Est-il possible que je peux mettre la main sur le ServletContext dans mon HelloHandler ?

99voto

Adeel Ansari Points 24434

En outre, @Resource d'annotation peuvent ne pas fonctionner. Essayez ceci

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

L'injection ne se produit pas jusqu'à ce que vous frappez 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

9voto

JohnC Points 81

Comme d'autres l'ont noté, le servletContext peut être injecté au niveau du terrain. 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 l'initialisation supplémentaires avec le servletContext disponibles.

Évident remarque - vous n'avez pas à utiliser le nom de la méthode setServletContext. Vous pouvez utiliser n'importe quel nom de la méthode que vous voulez tant que vous suivez le standard java bean modèle de nommage pour les setters, nulle setXXX(Foo foo) et utiliser le @Contexte de l'annotation.

5voto

ZZ Coder Points 36990

Juste utilisation des ressources de l'injection de ce genre,

@Resource ServletContext servletContext;

0voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X