Maillot / ServletContext et de chargement de ressources au démarrage
Je suis un peu nouveau dans le développement web avec Java.
Je suis le développement d'un service web et j'ai choisi de REPOS /Jersey.
Je veux init quelques trucs au démarrage de la prestation et de les garder
tout au long de la vie du service.
Première question : Est ce que le constructeur de la Jersey Servlet un bon endroit pour le faire ?
Fondamentalement, ce que je veux faire est de charger un fichier de configuration.fichier ini situé dans mon répertoire WEB-INF.
Suivant cette aide, je comprends que j'ai besoin d'un ServletContext pour charger mon fichier en tant que ressource.
Cependant, il n'est pas clair pour moi comment faire pour obtenir ce ServletContext dans un Jersey Servlet, comme il n'est pas vraiment une instance de servlet, mais plutôt d'un POJO avec quelques annotations.
Je voulais essayer cette astuce, mais l'attribut "contexte" est null dans le constructeur. Je pense que Jersey peut le remplir après le constructeur. Droit ?
Alors, comment est la bonne façon de le faire ?
Voici mon code pour l'instant :
/** Main REST servlet */
@Path("/")
public class Servlet {
//----------------------------------------------------
//Constants
//----------------------------------------------------
static private final String CONFIG_PATH = "/WEB-INF/config.ini";
//----------------------------------------------------
//Attributes
//----------------------------------------------------
/** Context */
@Context ServletContext context;
//----------------------------------------------------
//Constructor
//----------------------------------------------------
/** Init the servlet */
public Servlet() {
//Load config.ini from WEB-INF
Config.config = new Config(
this.context.getResourceAsStream(CONFIG_PATH));
//FAIL! this.context is null ...
}
//----------------------------------------------------
//URI Handlers
//----------------------------------------------------
/** Welcome page */
@GET
@Path("/")
@Produces(MediaType.TEXT_HTML)
public String welcome() {
return "<h1>Hi there.</h1>";
}
}
Toute aide serait grandement appréciée.
Merci d'avance,
Raphaël
OriginalL'auteur Raphael Jolivet | 2010-05-31
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas familier avec Jersey, mais en général, dans une application web Java, je pense que la bonne chose à faire serait de créer un ContextListener.
Un contexte auditeur est une classe qui implémente l'interface javax.servlet.ServletContextListener et est configuré dans votre web.xml. Il a une méthode qui est exécutée lorsque la demande est d'abord loded dans votre conteneur, et un autre qui est exécutée lorsque l'application est arrêtée, c'est donc l'endroit idéal pour mettre quelques un temps d'initialisation des choses, et de nettoyer les choses avant que l'application est arrêtée.
Afin que les étapes sont les suivantes :
Vous trouverez plus d'infos ici : tutoriel
Ou du Soleil, er, Oracle du site.
Par ailleurs, si votre fichier sera dans un fichier JAR, je ne suis pas sûr que le ServletContext méthode est la meilleure façon de le charger. Je pense que vous êtes mieux avec somethinbg comme :
Pas sûr de ce que vous avez fait comme cela ne fonctionne pas: Jersey le mange et le code, comme écrit dans le tutoriel, n'est jamais appelé sous un Maillot Reste de la servlet.
OriginalL'auteur Pierre Henry
À l'aide d'un ContextListener n'est pas le JAX-RS façon de le faire-- le ContextListener est la "nouvelle couche", comme il l'était, dans la servlet API.
Vous pouvez mettre le annoté de la déclaration dans les paramètres du constructeur et il sera transmis au constructeur:
À l'aide de @Contexte d'annotation pour un membre de données initialise que membre après que l'objet est construit, comme vous l'avez découvert.
Une autre façon de le faire est de déplacer l'initialisation de l'objet de Config dans une sorte d'initialisation d'appel, et initialisez uniquement quand c'est nécessaire, c'est à dire l'initialisation tardive. Puis le ServletContext membre de données ont déjà été fixés par le cadre de Jersey.
Bonne Chance!
Kirk
OriginalL'auteur Kirk Pierce