2010-04-28 3 views

Répondre

15

Vous feriez mieux de le passer comme argument au constructeur de votre objet, ou le définir en utilisant une méthode setter. En fait, vous pouvez obtenir l'attribut de contexte correspondant à votre objet et le transmettre uniquement via constructeur/setter. Par exemple:

YourClass obj = 
    new YourClass((AnotherClass) servletContext.getAttribute("yourAttribute")); 

Une option bien pire et plus complication est:

  1. Créer une ServletContextListener
  2. enregistrer dans web.xml avec <listener><listener-class></listener-class></listener>
  3. sur contextInitialized(..) obtenir le ServletContext de l'événement et le stocker dans un singleton - un champ statique Somehwere.

Vous pouvez le faire sur chaque demande, en utilisant un ServletRequestListener et le stocker dans un lieu ThreadLocal.

Ensuite, vous pouvez obtenir la valeur par appeler votre singleton/titulaire ThreadLocal comme ceci:

ServletContextHolder.getCurrentServletContext() 
+1

Ou passez dans un constructeur une copie/vue de 'ServletContext' correspondant à l'objet en question. –

+0

@Tom: c'est déjà mentionné dans la première phrase. – BalusC

+0

peut-être que Tom voulait dire que vous devriez obtenir l'attribut de contexte qui est pertinent pour l'objet et le transmettre seulement. Je vais l'inclure. – Bozho

0

J'ai eu ce problème, mais comme je l'avais appelé la classe d'un JSP, je simplement transmis la demande HttpServletRequest » "référence de la JSP à la classe et fait l'appel dans la classe à:

String appPath = request.getServletContext().getRealPath(""); 
Questions connexes